학습 내용_2차
배점
AI 데이터 전처리 - 6문제, 20점
3점 X 4문제
4점 X 2문제
AI 모델 개발 - 9문제, 33점
3점 X 3문제
4점 X 6문제
AI 시스템 구축 - 4문제, 25점
3점 X 2문제
4점 X 1문제
서술형 1문제
AI 트렌드 - 6문제, 22점
3점 X 2문제
4점 X 4문제
AI 데이터 전처리 - 6문제, 20점
데이터 수집 (Collection)
데이터 저장
저장 장치 속도 비교
데이터 검색 속도(일반적으로 말하는 속도): NVMe SSD > SATA SSD > SATA HDD
데이터 전송 속도: SATA HDD > SATA SSD > NVMe SSD
참고
image.png
image.png
저장 포멧
binary data: 파일
대용량 테이블, 텍스트 파일 포멧
HDF5: 잘 안씀
대용량 과학 데이터 저장
파일 하나에 저장하여 느림
Parquet: 표준 포멧Parquet: 표준 포멧
컬럼 구조. 대용량 분석에서의 사실상 표준
image.png
장점: 압축 효율, 쿼리 성능, 스키마 호환, 분할과 병렬 처리
단점: 쓰기 속도, 쿼리 설계 필요
Feather: 확산 중
Python, R 등의 데이터 프레임 파일 포멧
읽기, 쓰기 빠름
파일 크기 작음. 파일 압축(LZ4, ZSTD)
열기반/행기반 DB
빅데이터 분석에서는 주로 속성 별로 데이터 전체의 특성을 분석함.
속성 별로 다룰 수 있는 열(컬럼) 기반 DB가 편리
일반적으로 샘플 하나하나를 다룸. AI에서는 전체 데이터에 대해서 값의 패턴 도출이 중요하며 각 샘플 별로 구분이 필요함
샘플 구분이 좋은 행 기반 DB가 필요함
전체 흐름도
통합 스택
image.png
AI, ML 스택
image.png
데이터 저장소
데이터 베이스
서비스 용. 정형 데이터
온라인 트랜잭션 처리(OLTP), 행 기반(특정 객체의 속성 값을 불러옴, 특정 건의 처리를 위한 값 호출)
데이터 레이크
원시 데이터 보관, AI/ML 연구용
정형, 반정형, 비정형
대규모 다양한 데이터 저장
ELT(추출-로드-변환)으로 가져옴. 로드한 다음 상황에 맞게 변환
데이터 웨어하우스
정제된 데이터로 경영/분석 보고
온라인 분석 처리(OLAP). 열 기반(특정 속성에 대한 값을 불러옴. 특정 속성에 대한 경향성 분석)
ETL(추출-변환-로드)로 가져옴. 데이터웨어하우스에 맞게 변환해서 로드함.
오픈 DB
2D 객체 인식 DB
CIFAR-10, CIFAR-100
2009년도 이미지 DB
CIFAR-10
10개 클래스
32x32 크기, 6000개/클래스
CIFAR-100
100개 클래스
32x32 크기, 600개/클래스
image.png
1) PASCAL VOC(Visual Object Classes) 07/12
VOC12에서 training 이미지 11K, 라벨된 객체 27k, 클래스 20개
mAP(mean Average Precision) at 0.5 IoU(Intersection over Union) 도입
image.png
2) ILSVRC (ImageNet Large Scale Visual Recognition Challenge)
2010년부터 2017년까지 매년 진행되었던 챌린지
클래스 1000개, 이미지 100만개
image.png
3) MS-COCO (The Microsoft Common Objects in Context)
클래스 91개, 이미지 200만개
평가 방법 엄격
0.5에서 0.95까지 IoU를 0.5 단위로 계산한 다음 이러한 10개 값의 조합을 AP(평균 정밀도)라고 하는 최종 메트릭으로 사용
소형, 중형 및 대형 개체에 대해 AP를 별도로 활용
image.png
4) Open Image V6 (Google)
이미지 객체 상자외에도 시각적 관계(여성 점프), 음성, 텍스트도 추가
이미지 920만개
190만개 이미지에 600개 클래스, 16만개 상자
V5는 클래스 350개, 이미지 280만개 추가
V6는 클래스 19957개, 이미지 5990만개
image.png
image.png
image.png
image.png
image.png
image.png
5) Issues of Data Skew/Bias
클래스 별로 이미지 개수의 편차가 크다
학습에 편향이 생길 우려가 있다.
실내 3D 객체 인식 DB
SUN RGB-D (princeton 대학교)
real RGB-D images of room scenes
700 object categories are labeled, training 5285 images , testing 5050 
image.png
NYUv2 (NYU-Depth V2) (New York University)
video sequences from a variety of indoor scenes as recorded by both the RGB and Depth cameras from the Microsoft Kinect
1449 densely labeled pairs of aligned RGB and depth images
image.png
ScanNet (Stanford University, Princeton University, Technical University of Munich)
indoor RGB-D dataset(2D and 3D)
Richly-annotated 3D Reconstructions of Indoor Scenes
1513 annotated scans,  20 classes of annotated 3D voxelized objects
image.png
Objectron (google)
bikes, books, bottles, cameras, cereal boxes, chairs, cups, laptops, and shoes
image.png
멀티모달 DB
LAION DB (2021)
이미지, 캡션 DB. 웹 크롤링으로 모음
LAION-400M
LAION-2B
LAION -5B
COCO-Caption - 사람이 캡셔닝
BLIP-CLS - BLIP으로 캡션
LLaVA-23K - GPT4로 캡션
ShareGPT4V - GPT4 Vison으로 캡션
ShareGPT4V-PT - Share-Captioner(ShareGPT4V로 학습한 모델)
CC-3M - 인터넷에서 이미지와 테깅된 캡션 수집
CC-12M
ChartQA - 차트와 이에 대한 질문, 응답
자율 주행 객체 인식 DB
KITTI: 도로 주행 촬영
high-resolution RGB, grayscale stereo cameras, and a 3D laser scanner
11 classes: building, tree, sky, car, sign, road, pedestrian, fence, pole, sidewalk, and bicyclist
nuScenes
6 cameras and radars with complete 360° coverage
 The 3D object detection challenge evaluates the performance on 10 classes: cars, trucks, buses, trailers, construction vehicles, pedestrians, motorcycles, bicycles, traffic cones and barriers
image.png
Argoverse
도로에서의 3D Tracking DB
image.png
image.png
image.png
Waymo Open Dataset
lidars, 5 cameras (front and sides)
 4 object classes - Vehicles, Pedestrians, Cyclists, Signs
image.png
H3D (Honda Research Institute 3D)
A*3D
3D object annotations, LiDAR,  frontal-facing RGB
image.png
한국어
MarkrAI
AIHub
NLP 관련
데이터 수집 방법
full service 회사 아웃소싱 > 소프트웨어 > 파트타임 채용 > 크라우드소싱
채용
장점
보안, 처리 속도, QC 필요 없음
단점
비용, 확장성 낮음(업무 추가 시 추가 채용 필요), 관리 부담
크라우드 소싱
장점
저렴, 확장성 좋음
단점
보안 X. QC 필요
아웃소싱(full service 회사)
업체 선정에 시일 소요.
품질 수준 점검 필요
소프트웨어
저렴
데이터 버전 관리
레벨 0
관리 안함. 파일 시스템이나 DB에 저장
문제점
모델은 코드와 데이터가 결합된 형태임. 데이터 버전 관리 안되면 모델 버전 관리도 안됨
위험
이전 수준의 모델 성능 재 학습 불가
레벨 1
학습 시점의 스냅샷 저장
원시적 관리
레벨 2
데이터와 코드 셋트로 버전 관리
JSON 형태로 저장. ID와 메타데이터(레이블, 사용자, timestamp)로 관리
git으로 관리 가능
레벨 3
데이터 관리 솔루션 활용
꼭 필요할 때만 사용
사용 어려움
비용과 운영 부담
도구에 lock-in 됨
주요 솔루션: DVC, Pachyderm, Quill
데이터 버전 관리
레벨 0
관리 X. 파일 시스템이나 DB에 저장
모델 파일 - 코드 & 데이터 셋트의 결과물
동일 모델 재학습 불가능
레벨 1
코드, 데이터 쌍 저장
레벨 2
코드, 데이터 버전 관리
JSON으로 ID, 메타데이터 저장
Git 활용 가능
레벨 3
버전 관리 솔루션 사용
솔루션 사용 복잡해서 솔루션에 종속됨. 비쌈. 권장 X
DVC, Pachyderm, Quill
라벨링
모델로 라벨링
분홍 데이터로 파란색 라벨링
image.png
라벨링 툴 사용
Roboflow
무료 데이터 셋 제공(자동차 번호판 등)
이미지 파일, Youtube 프레임별 라벨링 가능(사각형, 클래스 이름/숫)
train, validation, test로 구분 가능
augmentation 가능(회전, 반전, 색상, 스타일 변경 등)
크기 일괄 변경 가능 - 기본 크기: 640 x 640
데이터셋 헬스 체크
전체, train, validation, test 개수 비율
해상도, 종횡비 체크
객체있는데 라벨링 누락 여부 체크
객체 없음 데이터 개수 체크
클래스명 누락/오탈자 탐지
한 이미지 안에 객체 수 너무 많거나 적은 사례 탐지
바운딩 박스의 위치 편향 확인(모서리에 몰려 있지 않은지)
중복/유사 데이터 여부 체
모델 별 포멧으로 저장 가능
다운로드 코드 제공
CVAT
개인정보보호
데이터 있는 곳에서 로컬로 학습. 데이터 유출 X
image.png
데이터 수집처 확인 못하도록 데이터 기록
데이터 처리
Airflow: 데이터 처리 순서 스케줄링. python 표준. DAG(비순환 그래프)
image.png
feature store
대규모 ML 개발 조직에서는 데이터 조직, 모델 개발 조직, 모델 엔지니어링 조직, 솔루션 개발 조직, 운영 조직이 다 다르다.
모델이 수시로 업데이트 되고 개발 버전이 달라서 feature 명세를 별도로 저장해놓고 feature store의 명세를 기준으로 소통, 버전 관리를 한다.
데이터, feature를 feature store에 저장해 놓고 데이터 분석, 모델 학습/시험, 서빙, 모니터링 함. 데이터 들어오면 실시간 feuture 자동 변환 가능. feature 필요 시(학습) 만들 필요 없이 저장된 것 사용. feature 규격 표준화로 관리가 편함. feature 모니터링 가능함
feature store 저장 항목
feature 명세: feature 정의, 계산 로직, 소유자, 날짜, 변경 이력 등
데이터 셋
feature 명세로 가공한 feature 셋
feature store 사용 안 하면,
feature 버전 달라짐 - 학습 모델의 feature != 서빙 모델의 feature
성능 떨어지는데 원인 파악 어려움
동일 feature 명세에 대해 조직별로 데이터 셋 중복 제작, 관리함
필요할 때 마다 feature 만들어야 함.
image.png
image.png
image.png
image.png
feature store 적용 사례
Salesforce: feature store의 feature 사용
image.png
feature store 오픈 소스
image.png
image.png
feature store 적용 전후
image.png
image.png
feature store와 상관 없는 작업
작업 흐름 관리
데이터 웨어하우스, 데이터 레이크
데이터 탐색 시스템
파이프라인 생성
feature 엔지니어링 툴
데이터 버전 관리
모델 제공 메타데이터 관리
팀 협업 활
버그 수정 데이터셋
github 이슈와 수정한 내역(PR, Pull Request)을 반영해서 버그 수정 능력 학습을 위한 데이터셋
데이터 정제 (Cleaning)
품질 필터링(저품질, 가짜 뉴스 제거), 중복 제거, 언밸런스 완화(소수 클래스 오버 샘플,
판다스 코딩
image.png
데이터에서 평균을 빼고 분산으로 나누면 평균은 0, 범위는 [-1, 1]로 정규화 된다.
분산 정규화
Standardization(표준화)
평균 0, 분산 1 로 변환, 값 범위는 보통 -3 ~ +3
가우시안 분포일 때 적합. 이상치 영향 받
Normalization(정규화)
최대, 최소 값의 범위를 0~1 (또는 -1 ~ 1) 로 변환
이상치가 있으면 데이터가 0이나 1에 몰릴 수 있음
텍스트 데이터 정제
컴퓨터가 알아볼 수 있게 변경
image.png
텍스트 정제
대소문자 통일
문장 부호, 특수 문자, 숫자, 공백, 개행문자('\n') 제거
단어별 품사 분석
불용어 제거 (the, is, and, 그리고, 그, 은/는/이/가 등)
토큰화
어절 단위, 형태소 단위로 나눔
n-gram: 한 번에 사용할 토큰 수
1-gram: I, love, you
2-gram: I love, love you
3-gram: I love you
image.png
어근 동일화
어간 추출
단어에서 어미를 뺀 부분
먹이다: 먹이(어간) + 다(어미)
studying: study(어간) + ing(어미)
love, loving: lov(어간) + ing(어미)
표제어 추출
단어 기본 형태
먹는다, 먹었다, 먹어라 -> 표제어: 먹다
품사 분석
명사, 동사, 부사, 감탄사 등
영어: 브라운 말뭉치 사용
한국어: 국립국어원 말뭉치 사
데이터 증강 (Augmentation, Sampling)
증강 방법
회전, 좌우 반전, 상하 반전, crop 하기, crop 지우기, 크기 변경, 색상/밝기 변경, crop한 것 붙이기, 겹치기
최소 크기보다 큰 것 대상
Mixup: 겹
CutOut : crop 지우기. 개라고 인지 못함
CutMix
일부를 다른 사진으로 변경. 개 인지함. 개 종류도 인지
image.png
image.png
이미지 생성
일부를 지우고 인페인팅으로 생성함
데이터 불균형
데이터 적은 클래스는 성능 낮게 나옴
데이터 추가 확보, 증강, 생
SMOTE (Synthetic Minority Over-smapling Technique)
데이터 불균형 해소를 위해 부족한 클래스에서 두 데이터 사이 위치의 데이터를 보간법으로 생성함.
Focal Loss(학습 가중치 조정)
쉽고 많은 데이터는 loss 가중치 줄임
어렵고 데이터 적은 클래스는 loss 가중치 높임
특히, Cross Entropy Loss는 데이터 많은 클래스 영향 많이 받음
DLAM (Label-Distribution-Aware Margin)
W가중치는 아니고, 최종 fully-connectec layer에서 class 판단할 때 데이터 적은 클래스의 판단 threshold는 낮추고 데이터 많은 클래스의 threshold 는 높임
학습 전반부에는 일반 학습, 후반부에는 데이터 적은 클래스의 가중치 높여서 학습하는 방법도 있음
Tip
산술 연산 증강(회전, 반전, 색상 변경, crop)은 학습 시에 처리하면 HDD 용량 절약 가능. 메모리에는 증강한 거 다 올림.
토큰화(tokenization)
모델 입력 길이에 맞춤
입력 토큰 길이가 길면 뒷 부분 잘라냄, 짧으면 뒤에 더미 토큰 패딩
한국어 토큰은 효율 낮음
한글자가 3byte
상대적으로 토큰 수 많아지면 context window 짧아
한글 최적화 부족. 최근 한국형 모델은 토큰 개선
BPE(Byte-Pair Encoding)
텍스트 토크나이징 방식
기존: 문자 단위로 토큰, 자주 붙어 나오는 것은 새 토큰으로 등록. 그러면 토큰 수 많이 필요함.
자주 붙어 나오는 단어는 토큰 하나. 드물게 나오는 단어는 여러 조각 단어로 토큰. 토큰 수 줄이고 Out of Vocaburary 해결
WordPiece
문자 단어로 시작해서 자주 같이 나오는 문자는 단어, 한 토큰으로 병합
SentencePiece
언어 독립적 토크나이저.
공백으로 구분하지 않음. 사전에 없는 단어도 조각 단어 조합으로 구성 가능.
AI 모델 개발 (설계-평가-튜닝) - 13문항, 58점
AI 모델 아키텍처 설계
ML
image.png
Regression
단순 선형 회귀 (Simple linear regression)
하나의 항목으로 구성된 직선
image.png
다중 선형 회귀 (Multiple linear regression)
항목이 여러 개.(농사 - 온도, 강수량, 광량, 질소 등)
image.png
image.png
적합, 검증 절차
데이터 준비
누락치, 이상치, 스케일 조정
진단
p값, VIF (Variance Inflation Factor) 확인
p값
독립 변수가 y값 설명에 기여하고 있는가
p < 0.05면 유의미함
VIF (분산 팽창 지수, Variance Inflation Factor)
독립 변수들이 겹치는 정도. 독립 변수의 독립성 판단
잔차, 적합값, QQ-플롯으로 가정 위반 탐색
적합값
회귀 함수로 계산한 예측값
잔차
회귀 함수로 계산한 예측값과 실제값 간의 차이
QQ-플롯
기준 분포(정규분포)와 실제 분포간 차이 비교. 동일하면 대각선.
image.png
개선
불필요한 변수 제거
스케일 차이있을 경우 스케일 정규화 필요함
ex) 나이, 소득
변환(로그 적용, 다항식으로 변환), 상호작용항 추가, 정규화 회귀 적용
상호작용항
두 독립변수를 묶은 것 추가
기본 회귀 모형
image.png
상호작용항 추가
image.png
정규화 회귀
과적합 방지 위해 규제항 추가함
규제항은 가중치를 0에 가까워지게 하는 항임. 그래서 가중치 업데이트를 약화 시킴.
규제항 없을 때의 경사하강법 업데이트(Gradient Descent Update)
원래 가중치(β)에 기울기 만큼 뺌. 기울기가 음수, 양수에 따라 β가 커질 수도 있고 작아질 수도 있다.
image.png
규제항이 있을 경우
규제항 값(2λβ) 만큼 숫자를 0에 가깝게 줄임(베타가 양수면 양수를 빼고, 음수면 음수를 뺌)
아래는 L2 정규화 일때의 기울기
image.png
기본 손실 함수(MSE)
image.png
L2 정규화(Ridge)
모든 계수를 조금씩 줄임
image.png
L1 정규화(Lasso)
필요 없는 계수는 0으로
image.png
혼합(Elastic Net)
image.png
검증
교차 검증 셋 점수 비교
n-fold validation에서 각 fold 별 점수를 비교
해석, 보고
의미 있는 계수 만 남김. 실무적 의미를 보고
다항식 회귀 (polynomial linear regression)
독립변수는 1개를 n제곱한 것.
독립변수를 여러개 적용하기도함: 다변량 다항 회귀(mulivariate polynomial regression)
image.png
스케일 차이있을 경우 스케일 정규화 필요함(나이, 소득)
과적합에 유의
서포트 벡터 회귀(SVR, Support Vector Regression)
서포트 벡터 밖의 샘플과의 편차 적은 회귀 함수 구함
image.png
의사결정트리 회귀(Decision Tree Regression, CART 회귀)
image.png
image.png
랜덤포레스트 회귀(Random Forest Regression)
의사결정트리 회귀를 여러 개 학습해서 각 결과의 평균을 출력함
결과가 분산 적어서 안정적
회귀 함수가 복잡해질 수록 과적합 가능성 커짐
image.png
Classification
로지스틱 회귀
로지스틱 회귀는 이진 분류 알고리즘. Sigmoid 함수를 사용한다.
Sigmoid 함수
Sigmoid 함수는 로지스틱 함수, tanh함수 등 S자 곡선 함수의 총칭. 통상 로지스틱 함수를 부르는 경우가 많음.
image.png
손실 함수는 log-likelihood를 사용.
MSE regression에 사용. 정규 분포를 가정하기 때문
이진 분류는 베르누이 분포
classification에서는 Cross-Entropy인 Log-likelihood를 사용한다.
image.png
용도
두 요인간의 관계가 있다. 없다 구분
아래 값들로 방문자의 구매 여부 예측
웹사이트에서 보낸 시간, 카드 항목 수, 과거 방문 행동, 사이트에서 머무는 시간, 카트에 추가한 항목 수
k-nearest neighbors
k-means 알고리즘은 clustering임. 혼동하지 말 것
k-nearest neighbors는 가장 가까운 라벨 데이터 k개로 새 데이터를 분류함.
image.png
장점
샘플간 거리만 계산할 수 있으면 되고 모델 학습 필요 없음
단점
느림. 추론 시 모든 데이터 있어야 함
거리 측정 방법
유클리디안 거리
멘하탄 거라
코사인 유사도
각도만 본다.
아래 그림에서 a는 거리는 b와 가까우나 각도는 C와 가깝다
image.png
매칭 유사도
세부 항목 중 몇 개나 값이 같은가
image.png
자카드 유사도
전체 중 겹치는 것의 비율. [0, 1]
image.png
스파스한(대부분의 값이 0인) 데이터에서의 비교
image.png
k값 설정
밀도 높으면 k값 높이고, 밀도 낮으면 k 값 낮춤
image.png
SVM
image.png
navie bayes
베이즈 이론 기반 분류기
X = ( x_1, x_2, ... )
image.png
장점
계산 단순하고 쉬움
학습 데이터 적어도 잘 작동
단점
특징(x_i, x_j, ...) 간 상관관계가 낮아야 성능 잘 나옴.
현실적으로 x_i가 모두 독립적이라고 전제하기 어려움
Decision Tree Classification
image.png
image.png
하이퍼 파라미터
복잡도 설정
최대 깊이, 분할 위한 최소 샘플 수, 리프 노드에 있어야 하는 최소 노드 수, 리프 노드 최대 개수
분할 기준
불순도
분할 기준으로 삼을 특성 선택 기준: 최적인 특성 기준으로 분할, 임의 특성을 기준으로 분할
깊이가 깊을 수록 과적합 가능성 큼. Validation 결과를 보면서 적정한 선에서 중단해야함.
image.png
image.png
Random Forest Classification
여러 트리의 결과 중 가장 많이 나온 클래스를 최종 결정
image.png
Clustering
계층적 클러스터링
image.png
데이터 개수만큼 클래스 만든 다음 가까운 클래스끼리 묶으면서 클래스를 줄여나간다. 1개가 되면 지정 클래스 수일때의 결과를 출력한다.
image.png
덴드로그램
image.png
k-means clustering
k : 원하는 클러스터 개수
알고리즘
image.png
image.png
스케일이 다른 항목으로 구성되어 있으면 정규화를 한다
'(값 - 최소값) / (최대값-최소값)' 으로 정규화
대용량 데이터는 배치 크기 조정
텍스트인 경우 Spherical k-means clustering 이 적합
코사인 유사도 사용하기 때문에 벡터 방향만 봄. 그래서 텍스트 길이 상관 없이 단어가 비슷하면 유사하게 나옴. 그래서 내용의 유사도에 따라 클러스터링됨.
k 값 결정 방법
클러스터 개수인 k를 1부터시작해서 늘려나감. 각 데이터와 클러스터 중심점까지의 거리의 총합을 구한다. 클러스터 개수가 늘어날 수록 거리의 총합이 줄어든다. k를 늘려도 별 효과 없는 지점의 k로 결정
image.png
image.png
k-medoids
k-means clustering과 같은데 클러스터 중심점을 평균점이 아닌 median 데이터를 사용한다.
이상탐지
이상치 있을 때
k-means 클러스터링은 이상치에 민감함. 전처리 때 삭제한다.
또는 k-medoids나 DBSCAN을 사용한다.
image.png
SOM
SOM은 clustering + 차원 축소 + 시각화
고차원 데이터를 2D로 매핑한다. PCA로 차원 축소 후 매핑한 2D에서 가까이 몰려 있는 것 끼릴 묶으면 클러스터링. 2D를 plot하면 시각화.
image.png
eHUVAtr.gif
clustering 성능 평가 방법
라벨값이 있으면 라벨과 비교
image.png
라벨이 없으면
클러스터간 거리는 멀고, 클러스터 내의 데이터는 모여 있으면 좋음
실루엣 점수 = (b-a) / max(a, b)
a = 클러스터내 데이터간 거리의 평균
b = 클러스터간 거리의 평균
클러스터를 대표하는 점
중심점 (Centroids)
평균 위치의 가상의 점
중앙점 (Medoids)
가장 가운데에 있는 데이터
대표점 (Representative)
클러스터 가장자리의 점
image.png
연관 규칙 학습 (Association Rule Learning)
대규모 데이터 셋에서 항목간 패턴을 찾는 것
ex) 맥주를 살 때 기저귀를 같이 산다.
평가 방법
Support (지지도) : 데이터 전체에서 특정 항목 집합이 등장하는 비율
image.png
Confidence (신뢰도) : 규칙 A 이면 B 일 때, A 가 등장 했을 때 B가 나타날 확률
image.png
Lift (향상도) : A, B가 서로 독립일 때에 비해 얼마나 더 자주 나타나는지 측정
image.png
Lift > 1 : A 이면 B. 셋트
Lift = 1 : A, B 독립
Lift < 1 : A 와 B는 상극ㅇㅇㅇㅇㅇㅇ
Apriori 알고리즘
자주 나타나는 집합이 있으면 그 부분집합도 자주 나타난다.
ex) {빵, 우유, 버터}가 자주 나타나면, {빵, 우유}, {빵, 버터}도 자주 나타난다.
FP-Growth (Frequent Pattern Growth) 설명
Apriori 알고리즘 개선 : 후보 집합이 많을 수록 계산량이 지수적으로 증가
FP-Growth 는 FP-Tree로 표현해서 탐색
알고리즘
아이템 빈도가 최소 지지도에 미달하는 아이템은 삭제함
-> 각 거래를 빈도순으로 트리에 삽입함. 앞부분이 동일하면 같은 경로로 겹쳐지므로 압축이 됨
-> 트리에서 빈발 패턴(자주 등장하는 패턴)을 찾음
-> 모든 빈발 패턴을 출력
image.png
Dense 데이터 셋에서 유리함
Eclat (Equivalence Class Clustering and bottom up Lattice Traversal)
Apriori 알고리즘 개선
교집합(Support)으로 빈발 집합을 찾는 방법. Confidence, Lift로 최종 확인.
ex)
거래 데이터
T1: {A, B, C}
T2: {A, C}
T3: {B, C}
T4: {A, B}
T5: {A, B, C}
각 항목이 등장한 거래
A → {T1, T2, T4, T5}
B → {T1, T3, T4, T5}
C → {T1, T2, T3, T5}
Support 계산 (교집합):
A ∩ B = {T1, T4, T5} → Support = 3 / 5 = 60%
: A, B가 전체 거래의 60%에서 같이 등장함
A ∩ C = {T1, T2, T5} → Support = 3 / 5 = 60%
B ∩ C = {T1, T3, T5} → Support = 3 / 5 = 60%
Confidence (신뢰도)
Conf(A → B) = Support(A,B) / Support(A) = 0.6 / 0.8 = 0.75
: A를 산 거래 중 70%에서 B도 같이 샀음
Conf(B → A) = Support(A,B) / Support(B) = 0.6 / 0.8 = 0.75
Conf(A → C) = 0.6 / 0.8 = 0.75
Conf(C → A) = 0.6 / 0.8 = 0.75
Conf(B → C) = 0.6 / 0.8 = 0.75
Conf(C → B) = 0.6 / 0.8 = 0.75
Lift (향상도)
Lift(A → B) = 0.6 / (0.8 × 0.8) = 0.6 / 0.64 = 0.9375
Lift = 0.9375 < 1 : A와 B는 상극인 관계임.
Lift(A → C) = 0.6 / (0.8 × 0.8) = 0.9375
Lift(B → C) = 0.6 / (0.8 × 0.8) = 0.9375
스파스 데이터 셋에서 유리함
강화 학습 (Reinforcement Learning)
개념
주어진 환경에서 가장 큰 보상을 얻는 판단을 하는 과정
image.png
좋은 강화 학습 알고리즘은?
최소의 행동으로 최대의 보상을 얻는 알고리즘
행동이 이산적인 경우
가치(Value) 높은 상태를 선택하는 알고리즘
행동이 연속적인 경우
행동의 기준(Policy)을 조절하는 알고리즘
image.png
image.png
장점
환경과 상호작용하면서 학습해가므로 복잡한 환경도 학습 가능
단점
정답이 아닌 보상을 통해서 점진적으로 학습해 가므로 학습이 복잡하고 오래 걸림
수학 개념 있어야 함
이산 공간 강화 학습(Q-Learning)
Discrete Action: 상,하, 좌, 우 같이 끊어지는 행동
Q(s, a): 상태 s에서 행동 a를 했을 때의 누적 기대 보상. 행동 가치
Upper Confidence bound (UCB, 상한 신뢰 한계)
Multi-Armed Bandit 문제
여러 슬롯 머신 있을 때 최소한의 횟수로 어떤 머신이 수익 잘 나오는지 파악하는 문제
액션 선택 = 수익 높은 머신일 수록 안 해본 것일 수록 선택 값 높임
아래 녹색: 해당 머신의 기대 수익, 파란색: 안 해본 머신이면 값 큼.
image.png
UCB가 나름 좋은 알고리즘임
image.png
딥러닝: 최소한의 데이터 확보와 학습 시도 횟수로 최대한의 성능을 얻는 것이 중요.
Thompson Sampling
여러 광고 위치 중 최고 위치 선정 방법
각 위치에 랜덤하게 노출 한 후 어느 정도의 샘플이 쌓이면 평균, 분산 구해서 최고 위치 결정함.
UCB 보다 성능 좋음
스크린샷 2025-05-11 210055.png
DQN (Deep Q-Network)
기존 Q-Learning에서는 (상태, 행동) 쌍별 가치를 테이블로 놓고 계산을 했음. 길어지거나 복잡하면 계산 어려워짐. 바둑, 벽돌깨기 등.
그래서 (상태, 행동) 쌍별 가치를 딥러닝(CNN)으로 학습했다. 상태가 많아도 연산 가능.
입력: 상태 값(아타리 게임은 화면 픽셀)
출력: 각 행동 별 Q값을 벡터로 출력
image.png
네트워크가 2개다. Q-Network를 복사해서 Target Network를 만든다. Q-Network는 매 스텝마다 업데이트 하고 Target-Network는 고정해놓고 있다가 지정된 주기 마다 Q-Network를 복사해서 동기화한다.
image.png
벽돌 깨기 DQN
기존 Q-Learning: 1080*1080*3 개의 간을 갖는 테이블 필요.
입력: 이미지 입력 받은 후 CNN으로 크기 줄여서 처리
출력: 행동 개수 만큼의 노드값
image.png
Replay Memory
아타리, 벽돌깨기에서 t-1, t, t+1에서의 상태(화면 이미지)는 비슷하다.
그래서 시간 가까운 상태(이미지)는 랜덤하게 뽑아서 학습함. 학습 효율 높임
장점
고차원 입력 가능(ex. 이미지)
단점
자유도가 늘어나면 경우의 수가 지수적으로 늘어나서 차원의 저주에 걸림
관절 7개인 7자유도의 로봇 팔이 있고 각 관절마다 행동이 3가지가 있으면 전체의 행동 셋은
3^7=2187 이어서 2187개의 Q가 나온다. 이에 대해 네트워크 학습, 추론 부담이 크다.
image.png
Double DQN
DQN의 문제점: 하나의 네트워크로 행동 A를 선택함. 과적합으로 특정 A를 선호할 수 있다.
Double DQN은 행동 선택 네트워크, 행동 가치 평가 네트워크로 분할.
Dueling Q-Learning
상태(s)의 가치와 행동(a)의 가치를 각각 구한 다음 합쳐서 최종 선택함
상태(s): 골 근처나 길목이면, 이동 방향에 상관 없이 유리하다. 좋은 위치인지 평가.
행동(a): 해당 위치에서의 유리한 방향인지 평가
하나의 네트워크에 출력값이 2개임.
image.png
image.png
Prioritized Experience Replay (PER)
Replay Memory에서 데이터 선택 방법
DQN의 문제점
랜덤하게 선택함. 특별한 케이스는 선택 안될 수도 있다.
Prioitizaed Experience Replay는 각 학습에 중요한 데이터에 일반 데이터도 추가해서 선택함.
Temporal-Difference Error: 딥러닝 추정 Q와 정답 Q간 차이인 MSE가 TD Error임. 오류가 클 수록 학습에 중요한 데이터.
Stochstic Sampling
TD Error 높은 데이터는 가중치 높게 설정한 다음 전체 데이터에서 랜덤하게 선택함.
Huber Loss
오류 값이 너무 크지 않게 도출함.
보통은 MSE로 에러 값 사용. MSE값이 너무 크면 MAE값을 사용
MSE는 지수적이라 에러 값이 크면 지수적으로 커짐.
MAE는 선형적으로 커짐
연속 공간 강화 학습(Policy Learning)
행동이 연속된 실수값. ex) 로봇팔 회전 각도(0~360도)
개념
이산 행동 학습에서는 행동 별 결과 보상 값 Q를 계산해서 비교함. 그래서 가치 함수를 정확히 계산하도록 학습함
연속 행동에서는 행동이 연속적이라 Q 몇 개를 계산하기 어려움. 상태 별로 최적 행동을 결정하도록 정책을 학습함
장점
이산 행동 강화학습에 비해 수렴 가능성이 크다
단점
이산 행동 강화 학습에 비해 비효율적.
분산이 크다
REINFORCE (Vanilla Policy Gradient)
가능한 행동 경우들(에피소드)을 실행 경로를 뽑고 보상이 큰 경로(행동)를 선택하도록 확률을 높임.
몬테카를로 방식 사용(여러 번 시도해서 확률 분포를 도출하는 방식)
image.png
Actor-Critic Method
Double DQN의 아이디어 차용.
Actor는 행동을 결정, Critic은 행동의 가치를 계산
Actor: 행동을 선택. π_θ(a_t | s_t)
Critic: 행동의 결과 가치 도출. ψ = Q_π (s, a)
image.png
image.png
image.png
image.png
A3C (Asynchronous Advantage Actor-Critic)
Actor-Critic을 수행하는 에이전트를 비동기로 병렬로 실행하고 주기적으로 중앙 네트워크에 반영함
각 에이전트들이 서로 다른 환경에서 학습함. 다양한 환경을 빠르게 학습할 수 있음.
Advantage는 해당 행동이 평균적인 상태 가치에 비해 얼마나 더 좋은지/나쁜지 측정
Actor는 Advantage를 보고 policy gradient를 계산함
image.png
입력 네트워크는 에이전트들이 비슷해서 모델을 공유해서 씀.
image.png
A2C (Advantage Actor-Critic)
A3C와 비슷하지만 에이전트 별 학습을 배치로 묶어서 진행하고 한꺼번에 통합 모델 업데이트 한다. 이것을 반복함.
image.png
A3C보다 A2C가 GPU 구현이 쉽고 효율이 높아서 A2C를 주로 씀
Proximal Policy Optimization (PPO, 가장 많이 쓰임)
정책 업데이트 시 과도한 경우는 억제해서 지나치게 업데이트 되지 않게 함.
보상 함수 = 기존 정책과 새정책의 비율을 행동에 곱한 것의 평균
image.png
image.png
정책 변화가 허용 범위를 넘어가면 min, max 값으로 대체한다.
(1-ε, 1+ε) 구간 내에서의 변화만 허옹하고 그 범위를 벗어나도 더 커지거나 더 작어지지 않게 함.
image.png
image.png
DPG (Deterministic Policy Gradient)
Actor에서 상태 값 입력에 대해서 행동의 확률이 아니라 행동 자체를 출력함. 연산을 단순화 해서 고차원 문제에 좋음
policy gradient로 학습
image.png
Critic은 행동의 기대 보상값 도출이라 원래 확률 분포가 아닌 실수 값임.
Actor-Critic과 비교
Actor
Actor-Critic: π_θ(a_t | s_t)
DPG: 𝜇_𝜃(s) . 행동을 직접 출력
image.png
Policy
Actor-Critic: On-Policy. 매 스텝 마다 최신 행동 데이터를 바로 학습에 반영
DPG: Off-Policy. 과거 행동 데이터, 최신 행동 데이터 모두 활용. 행동과 학습 정책이 다를 수 있음.
활용
Actor-Critic: 불확실성 표현과 탐험이 중요한 문제에 적합
DPG: 고차원 문제에 적합
DDPG (Deep Deterministic Policy Gradient)
DQN을 개선
DQN 문제점: 자유도와 행동 종류가 늘어나면 차원의 저주에 걸림
DDPG: 높은 차원이면서 연속인 행동 공간의 정책 학습
동작
Actor Network: 상태 s_t 입력 받아서 행동 a_t 도출함
-> a_t 실행. 보상 r_t, 다음 상태 s_(t+1) 값 나옴. Replay Buffer에 저장.
-> Critic Network 업데이트
Critic Loss로 Critic Network 업데이트 함
Critic Loss = t 시점의 미래 보상 예상 값과 실제 보상 값의 차이
t시점 에서 미래 누적 보상 예측 값 = Q_t
t 시점의 미래 누적 보상 값 정답 = t단계의 실제 보상 + (t+1 )시점 에서 미래 누적 보상 예측 값 = r_t + Q_(t+1)
이 때 Q_(t+1) 계산 때는 target Actor와 target Critic을 사용함
-> Actor Network 업데이트
업데이트 한 Criric Network 로 Q값(Critic 결과 값)이 최대가 되는 a_i 값을 찾고 Actor Gradient를 계산함. Actor Network 업데이트.
Target Actor, Target Critic은 그대로 또는 미미하게만 업데이트 하다가 주기적으로 Actor Network, Critic Network와 동일하게 업데이트 함.
Target Network를 두는 이유는 잘 못하면 발산하니까 안정적으로 업데이트 하기 위함임.
image.png
진화 전략 (Evolution Strategy)
Evolution 알고리즘: 블랙 박스에 입, 출력만으로 원하는 모델 학습함.
진화 알고리즘
경쟁에 이긴 개체만 살아남고 자손 이어짐
image.png
image.png
이산/연속 공용
MDP/MDPs (Markov Decision Processes)
정책을 시행착오를 통해 다듬어 가는 과정. 현재 상태(s)와 정책(π)에서의 기대 가치(v)를 예측하고 실행 후 실제로 좋은 결과를 얻을 수 있도록 정책(π)을 계속 업데이트 해감.
image.png
주요 표기
S_t: 시간 t에서 가능한 모든 상태의 집합(에이전트가 어떤 상황인지를 나타냄)
A_t: 시간 t에서 에이전트가 선택할 수 있는 모든 행동의 집합 (ex, 상, 하, 좌, 우)
T: 에피소드 한 번에 걸리는 시간
Q_π (s, a): 상태 s, 행동 a의 가치 함수
π: 정책. 각 상태에서 어떤 행동을 할지 결정하는 규칙/함수/확률로 상태 S를 행동 A로 매핑함
π(a|s) : 상태 s에서 행동 a를 할 확률.
R: reward, 보상
G_t: 미래의 보상 예상 값, t시점 이후의 모든 보상의 합,
G(t) = R(t+1) + R(t+2) + ... + R(T) = R(t+1) + 𝛾G(t+1)
θ: 파라미터
𝛾 (감마): 미래 보상 G_t에 대한 할인율. Discount Factor (감소율).
ε (엡실론): Epsilon Greedy: 활용(Exploitation, 현재까지의 최고 행동)과 탐험(Exploration, 새로운 행동)의 비율 조정.
ε = 0.1 (10%) 이면, 합리적 행동할 확률 90%, 무작위 행동할 확률 10%
V_π (s) : 상태 가치 함수(State-Value Function). 정책 π일 때 상태 s에서의 기대 가치.
V_π (s) = E[ G(t) | S(t)=s]
Q_π (s, a): 행동 가치 함수(Action-Value Function). 정책 π일 때 상태s에서 행동 a를 할 때의 기대 가치
Q_π (s, a) = E[ G(t) | S(t)=s, A(t)=a ]
V *(s) : 최적 정책 π일 때의 상태 가치 함수
Q* (s, a) : 최적 정책 π일 때의 행동 가치 함수
V *(s) = max_a Q* (s, a) : 최고의 상태 가치는 최고의 행동을 할 때의 행동가치라고 할 수 있다.
a* = arg max_a Q* (s, a) : 최고의 행동은 행동 가치 함수Q를 극대화 하는 행동
과제
상태(s)와 정책(π)에서 기대 누적 보상(V) 도출 방법 정의
상태(s)와 정책(π)에서 특정 행동(a)을 했을 때의 기대 누적 보상(Q) 도출 방법 정의
Markov Process
현재 상태 정보로 미래를 예측. 상태 집합과 각 상태에서 다른 상태로의 전이 확률을 갖고 있음.
-> Markov Chain
Markov Process가 상태가 연속적 전이하는 관계로 표현한 것.
-> MRP (Markov Reward Process)
Markov Chain에 보상(reward)을 추가한 것
-> MDP (Markov Decision Process)
MRP에 의사결정(행동 a, 행동 결정 정책 π)을 추가한 것
주요 요소
V: 상태 s, 정책 π 일 때 기대 누적 보상
image.png
Q: 상태 s, 정책 π 일 때 행동 a를 하는 경우 기대 누적 보상. a의 적절성 판단에 사용
image.png
목표: 최적의 정책을 찾는 것
환경이 어떻게 동작하는지 환경 모델을 알고 있다면 'Planning' 방법을 통해 정책 도출 가능.
환경 모델을 모른다면 시행착오(행동과 결과를 보는 과정을 반복)를 통해서 최적 정책을 찾을 수 밖에 없다. 즉, 행동 가치 함수로 정책을 학습해 간다.
행동 가치 함수 예: MC(Monte Carlo) Method, SARSA, Q-Learning, Policy Gradient 등
image.png
On-Policy
현재 정책에 따라 행동 하면서 그 결과를 바탕으로 학습함
경험 만드는 정책과 경험을 반영해서 업데이트 하는 정책이 동일함
Off-Policy
다른 정책, 과거의 정책 등이 만든 Replay Buffer에서 데이터를 샘플링 해서 현재 정책을 업데이트 함.
경험 만드는 정책과 경험을 반영해서 업데이트 하는 정책이 다름
ε-Greedy
전에 안 해본 새로운 시도를 하게 하는 확률
보통 ε는 10%
초기에는 ε를 크게하고 후반부에는 1%로 줄여서 수렴하게 함
V 계산 방법
Monte Carlo
환경 모델 모름
경로(에피소드)를 샘플링 해서 끝까지 가서 보상 확인하고 나서 V 도출함
단점: 경로가 유한해야 함.
image.png
Dynamic Programming
환경 모델 안다.
그래서 그냥 각 경로를 끝까지 안 가고 한 스텝만 가도 바로 V 도출함
image.png
Temporal Difference
환경 모델 모르는데도 한 스텝 마다 V 예측치 도출한다.
Monte Carlo의 G_t 를 (다음 단계에서의 보상과 그 이후 보상의 예측치)로 변경한 것임.
Bellman Equation
V, Q를 재귀적인 형태로 표현한 것이 Bellman Equation임.
image.png
Temporal Difference는 Bellman Equation에서 재귀 뒷 부분을 예측값으로 넣어서 푸는 것임.
DP 처럼 경로 무한해도 적용 가능
image.png
SARSA
Temporal Difference는 V를 구하는 것임.
이 방식 데로 Q를 구하는 방식이 SARSA임
image.png
image.png
메타 강화 학습 (Meta-Reinforcement Learning)
빠른 학습 방법을 찾는 학습 법
Meta Training
다양한 과제에서 에이전트 학습시킨 후 에이전트의 학습 방법(업데이트 규칙, 파라미터 초기화 방법, 메모리 관리 방법 등)을 학습한다.
Meta Test
새로운 과제에 학습한 데로 알고리즘을 세팅해서 빠르게 학습한다.
모방 학습 (Imitation Learning)
전문가의 시연을 에이전트가 따라하면서 학습한다. 메타 학습을 적용해서 전문가 시도 횟수를 줄인다.
One-shot / Few-shot Imitation Learning
image.png
image.png
Domain Randomization
현실에서, 실제 데이터로 강화 학습하는 것은 어렵다. 그래서 시뮬레이션을 만들어서 가상 데이터로 강화 학습한다.
image.png
image.png
응용 사례
알파고(DeepMind)
알고리즘
Value Neotwork + Polcy Networks
OpenAI Five(OpenAI)
Dota2 게임을 인간 상대로 이김
알고리즘
Proximal Policy Optimization(PPO)
Robot Control(OpenAI)
로봇 손을 제어해서 큐브를 맞추기
알고리즘
Proximal Policy Optimization(PPO)
Data Center Cooling(DeepMind)
데이터 센터 쿨링 최적화. 40% 비용 절감
알고리즘
Reinforcement Learning
영화 추천(Netflix)
알고리즘
Reinforcement Learning
Trading(JP Morgan)
알고리즘
Reinforcement Learning
앙상블
종류
투표
동일한 데이터로 학습한 모델 여러 개의 결과의 평균 값이나 최빈값을 출력
image.png
배깅
각자의 데이터로 학습한 모델 여러 개의 평균이나 최빈값으로 출력
image.png
부스팅
모델을 순차적으로 학습함. 앞 모델이 틀린 데이터에 가중치를 높여서 학습 함.
추론 때는 모든 모델의 결과 값의 평균이나 최빈값을 출력함.
맨 마지막 모델이 가장 나아 보이지만 어차피 약한 모델들이라 맨 마지막 모델도 하나로는 성능 안나옴.
image.png
스태킹
2단계로 학습, 추론함. 앙상블 방법 중 성능 좋음
1단계
모델 별로 다른 알고리즘으로 학습/추론(SVM, Tree, NN 등)
2단계(메타 모델)
1단계의 결과를 입력으로 받아서 모델 1개가 학습/추론.
회귀 또는 분류 모델 사용
image.png
배깅 알고리즘
랜덤 포레스트 앙상블
트리 여러 개 사용.
정확도 높고 과적합 없음.
image.png
부스팅
Gradient Boosting Machine(GBM)
단계 마다 이전 단계의 모델을 보완하는 새로운 모델을 추가함. 전체적인 분류를 세분화하는 효과.
image.png
XGBoost (eXtream Gradient Boosting)
GBM을 개선
정규화 추가, 병렬 처리, 누락 데이터 처리기 내장, 분할 종료 방법 개선
LightGBM
XGBoost와 같은데 트리를 추가 할 때 전체적인 분류를 세분화하는 관점 보다는, 오차가 큰 부분을 집중적으로 세분화 하도록 트리를 추가함.
image.png
딥러닝
Unsupervised Learning
볼츠만 머신(Bolzmann Machine)
정답 데이터의 분포 데로 출력하는 모델을 만든다.
image.png
fully connected 된 노드 중 일부는 visible 노드, 나머지는 은닉 노드로 설정.
visible 노드는 모두 입력/출력으로 만들 수도있고, 입력노드 출력 노드를 정해놓을 수도 있다.
은닉노드를 학습시켜서 입력 여부 상관없이 출력 노드로 원래 분포와 비슷하게 출력이 되기만 하면 됨
image.png
제한된 볼츠만 머신 (RBM, Restrected Bolzmann Machine)
2layer 구조로 만들어서 연결 구조를 단순화 함
image.png
image.png
오토 인코더
입력값을 가장 잘 나타내는 임베딩 Z를 만드는 인코더를 만드는 것이 목적임. 임베딩 Z가 잘 만들어졌는지 확인하고 인코더를 학습하기 위해 디코더 사용함.
image.png
image.png
stacked autoencoder
오토 인코더 여러개를 학습시킨 후 은닉층을 이어 붙여서 크기를 키우고 fine-tuning으로 완성함
image.png
스파스 오토인코더(sparse autoencoder)
오토인코더에서 임베딩 z 레이어에 가끔 씩 활성화되는 노드를 추가함. 가끔 씩 활성화되는 노드의 활성화율이 0이면 오토인코더와 동일한데 가끔 씩 활성화 되어서 약간 보조 해주는 것임. 보통은 노드 값이 0이라 원핫임베딩처럼 스파스함.
image.png
디노이징 오토인코더(Denoising Autoencoder)
입력값이 노이즈 추가해서 노이즈에 강한 인코더를 만듦
image.png
VAE
Semi-supervised Learning
일부 라벨된 데이터, 다수 라벨 없는 데이터 학습
라벨 데이터로 학습 -> 라벨 없는 데이터 라벨링, 이 데이터 포함해서 재학습
image.png
Unsupervised Reinforcement Learning
대조학습
표현학습(Representation Learning)의 하나
기준 샘플(anchor)를 뽑고 이와 동일 클래스 샘플과 다른 클래스 샘플을 뽑음. 기준 샘플과 동일 클래스 끼리의 거리는 좁히고, 기준 샘플과 다른 클래스 샘플 간 거리는 늘어나도록 학습함.
CURL(Contastive Unsupervised Representatiions for Reinforcement Learning)
이미지 입력 RL은 보통 CNN + RL 이며 학습이 느리고 불안정함
CURL은 CNN의 결과인 임베딩을 더 잘 뽑아서 RL성능을 높이는 방법임.
임베딩 품질 개선을 위해서 대조학습을 함. 어떤 상태의 이미지를 기준이미지(anchor)로 잡고 이 이미지를 증강한 이미지를 Positive 이미지로 정한다. 그리고 다른 상태의 이미지를 Negative 이미지로 해서 대조학습을 한다.
임베딩이 개선되었으니 RL 학습이 빨라지고 성능 올라간다.
image.png
학습 이론
활성 함수
시그모이드
확률 해석 가능
그래디언트 바니시 문제 발생. 극단으로 가면 기울기가 0이 되기 때문.
non zero-centerd: 값이 0~1 이라 항상 양수임. 입력 x에 따라 -, + 모두 될 수 있지만, x의 부호가 균형잡혀 있는 것이 아니기 때문에 모델에 반영되는 기울기의 평균이 0이 아닌 한쪽에 치우치게 됨. 불균형적으로 업데이트 됨.
image.png
배치 정규화
평균을 0, 분산을 1로 만들어서 학습 편향성 없앰
역전파시에도 기울기를 0이 아닌 어느 정도의 값으로 유지시켜 줌. 그레디언트 바니쉬 문제 예방
Tanh
시그모이드의 non-zero centered해결 하기위해 사용.
평균이 0임.
그래디언트 베니싱 문제 여전히 있음. 극단으로 가면 기울기가 0이 되므로.
image.png
ReLU
그레디언트 배니싱 문제 개선. 양수면 극단으로 가도 기울기 유지됨. 음수면 여전히 기울기 0.
image.png
Leaky ReLU
그레디언트 배니싱 문제 해결. 음수일 때도 기울기 값 가짐.
image.png
softmax
fully connected layer에서 사용
전체 클래스에서의 확률의 합이 1. 가장 확률 높은 것을 최종 클래스로 선택함.
학습
순방향(Forward): 예측 값과 손실 계산
역방향(Backward): 기울기(Gradient) 계산
최적화(Optimizer): 기울기*학습률 만큼 가중치를 업데이트함
Vanishing(베니싱)
역전파 때 기울기를 구해서 반영함.
해당 층의 기울기 = 바로 전 층 기울기 X 그전 층 기울기 X 그 전전층 기울기 X ....
image.png
층이 깊어지면 해당층의 기울기는 0이 되어서 학습이 안됨.
해결 방안: Leaky ReLU, He 초기화, 배치 정규화
He 초기화: ReLU 사용시 모델(W)의 초기화 방법. ReLU 계열에서 Vanishing 이 줄어들도록 분산을 2배가 되도록 초기화 함.
발산(Exploding)
해결 방안
Gradient Clipping
기울기의 최대값을 지정해둠. 기울기가 너무 커져도 최대값으로 한정되어서 발산 안됨.
image.png
배치 정규화(Batch Normalization)
배치 졍규화 레이어 마다 배치 단위로 임베딩 범위를 정규화 함.
image.png
임베딩(x) 평균이 0, 분산이 1이 되록 정규화 함
image.png
정규화 한 임베딩(x)에 스케일과 시프트를 반영해서 조정한다.
image.png
배치 정규화 활용 예
레이어 마다 분포가 편향되는 것을 바로 잡아줌
image.png
ReLU인 경우 ReLU 후에 배치 정규화 하면 너무 많이 잘려서 분포가 왜곡됨. 배치 정규화 한 다음 ReLU하면 덜 잘려서 균형잡힌 활성화 가능함. 학습 안정성과 속도 모두 개선됨.
image.png
image.png
Optimizer
image.png
SGD (Stochastic Gradient Descent)
GD 처럼 전부 다 보려면 시간 걸리니까 전체의 무작위 샘플이나 미니 배치만 보고 가중치 업데이트
image.png
image.png
장점
수렴 빠름
계산 비용 적고, 메모리 적게 사용
단점
수렴 과정에서 진동 발생
하이퍼파라미터에 따라 편차 큼
불안정한 최종 수렴(진동이 커서) -> 학습률 점진적 감소로 해결
로컬 미니멈을 잘 못 빠져나옴
mini batch SGD
조금만 대신에 미니 배치 만큼은 보고 결정하자. 절충형
Momentum
물리 관성 적용: 이전 업데이트 값 90% + 이번 업데이트값 10% 으로 업데이트
image.png
image.png
장점
학습 속도 높음
흔들림 적음
노이즈에 강함
로컬 미니멈 빠져 나올 수 있음
단점
글로벌 미니멈도 빠져 나올 수 있음
NAG (Mesterov Acclearted Gradient)
Momentum과 같은데 이번 업데이트 값을 현재 위치가 아니라 이전 업데이트값으로 90% 업데이트 한 위치에서 업데이트 값을 구해서 10%를 반영한다.
image.png
장점
Momentum에 비해 더 빠르고 안정적으로 수렴. overshooting 방지
단점
계산 복잡
하이퍼 파라미터에 민감(발산하거나 수렴 느릴 수 있음)
AdaGrad
처음에는 크게 가다가 갈수록 작게 학습
t가 커질 수록 G_t 가 무한대가 되어서 학습률이 0이 됨
image.png
image.png
image.png
RMSProp (Root Mean Square Propagation)
AdaGrad 개선
학습률의 분모가 무한대가 되지는 않아서 학습률이 0이 되지는 않는다.
최근 기울기가 크면 이번 학습률은 작게하고 최근 기울기가 작으면 학습률이 커져서 충분히 학습하게 한다. 이렇게 너무 많이 가지도 너무 멈춰 있지도 않게 조절함.
image.png
image.png
Adam (Adaptive Moment Estimation)
RMSProp와 Momentum의 장점을 섞음.
방향과 스텝 크기 모두 적절히 조정
빠르고 안정적으로 수렴함.
image.png
image.png
Nadam (Nesterov-accelerated Adaptive Moment Estimation)
Adam 에서 Momentum 대신 NAG 사용
좀 더 빠르고 안정적 수렴
image.png
image.png
LLM
image.png
이론
순서: 아케텍터 선정 - 데이터 준비 - 토크나이징 - pre-training - fine-tuning, instruction tuning - alignment - 디코팅, 압축, 최적화
Positional Encoding
절대 위치 임베딩(APE, Absolute Positional Embeddings)
절대 위치 사인, 코사인 학습
토큰 개수 한정
원조 Transformer에서 사용
APE.png
상대 위치 임베딩(RPE, Relative Positional Embeddings)
상대 거리 행렬 삽입
T5 변종에서 사용
RPE.png
회전 위치 임베딩(RoPE, Rotary Posiion Embeddings)
Q, K 벡터를 회전 행렬로 일정한 각도로 회전 시킴. 그래서 상대적 거리 정보를 반영하게 됨.
GPT, PaLM, LLaMA에서 사용
RoPE.png
Pre-training
Autorgressive Language Modeling
다음 토큰 예측 위한 Log-likelihood 최대화
GPT 류에 사용
Masked Language Modeling
입력 일부를 Mask로 가리고 복원
BERT류
MoE & Switch Transformer
FFN을 다수 전문가로 분할해 계산량을 아끼면서 파라미터를 테라급까지 늘림
moe.png
Fine-tuing, Instruction Tuning
SFT(Supervised Fine Tuning)
테스크별 소량 라벨로 성능 향상
Instruction Tuning
자연어 지침+예시 데이터(Natural Intructions등)로 범용 '지시 수행' 능력 부여
Self-Instruct
모델이 스스로 지시, 정답 쌍을 생성해 부트 스트랩 학습
조정
RLHFreinforcement learning from human feedback)
인간 피드백으로 보상 모델을 학습해서 정책을 강화
RLAIF(reinforcement learning from AI feedback)
상위 LLM으로부터 자동 피드백을 받아 미니, 중형 모델을 튜닝
DPO(Direct Preference Optimization)
사람이 선호한 응답의 확률을 기준 모델 대비 더 높이고, 덜 선호한 응답의 확률은 더 낮추도록 직접 최적화.
사람이 만든 모델 결과의 피드백(OK, NOK)으로 추가 학습함. SFT(Supervised Fine-Tuning) 학습과 다르다. SFT는 OK, NOK 각각에 가중치 조정한다. DPO에서는 OK 데이터, NOK 데이터를 동시에 받아서 OK 데이터에서의 확률과 NOK 데이터에서의 확률의 차이의 비율 만큼 가중치를 조정한다.
원래 잘 하는 것을 유지하면서 OK 응답의 확률은 올리고 NOK 응답은 낮추는 안전하고 정교한 최적화다.
그래서 SFT는 학습이 과하면 편향 될 수 있지만, DPO는 분포 안정적 유지 됨.
KTO(Kahneman-Tversky Optimization)
Prospect Theory에 기반해 '바람직, 비바람직' 1-bit 신호만으로 정렬
대량 데이터 활용이 용이
DPO.png
KTO.png
디코딩 전략: 다음 토큰을 선택하는 전략
Greedy Search
가장 확률이 높은 토큰만 선택
속도 빠름
시퀀스에 미치는 영향은 고려 안함
Beam Search
N개 후보 확장 후 최고 득점 시퀀스 선택
Top-K Sampling
상위 k개에서 토큰 1개 선택
Top-p Sampling
누적 확률 p가 될 때까지 k개 선택. 그 중에서 1개 선택
비용 효율적인 훈련/추론/적용/압축
ZeRO (Zero Redundancy Optimizer)
대규모 분산 학습용 메모리 최적화 방법
모델과 파라미터값들을 쪼개서 각 GPU에서 연산한 다음 각 shard를 모아서 하나로 합침.
RWKV (Receptance Weighted Key Value)
RNN 재해석으로 훈련은 Transformer 식 병렬화, 추론은 선형 복잡도
긴 컨텍스트, 저지연 추론 가능
rwkv.png
LoRA(Low-Rank Adaption)
저랭크 행렬 A, B 만 학습해 W 추정 -> 메모리, 파라미터 절감
경량 파인튜닝, 모델 공유용이
lora.png
Knowledge Distillation
대형 teachrer출력을 student가 모방 학습
엣지 배포용 소형-고성능 모델 학습
Quantization
가중치 정밀도 FP32->INT8/INT4, QAT 또는 PTQ
모델 크기 작고 추론 속도 빨라짐
image.png
LLM 제한 사항
무상태, 확률성
앞 대화를 기억하지 못하고, 동일 프롬프트에도 출력이 달라질 수 있다.
지식 고정, 외부 정보 미 접근
훈련 시점 이후의 사실, 사적, 도메인 지식에 접근 불가
비용, 지연, 할루시네이션
거대 파라미터, GPU 비용, 사실과 무관한 '그럴듯한' 문장 생성 문제
할루시네이션은 Intrinsic vs Extrinsic으로 구분되고, ROUGE, BLEU, PARENT, FactScore 등 통계, 모델 기반, 인간 평가가 병행된다.
내재적 환각
원본 자료와 직접적으로 충돌하여 사실적 부정확성이나 논리적 불일치
외부 환각
모순되지는 않지만 출처에 대해 검증할 수 없으며 추측적이거나 확인할 수 없는 요소를 포함
LLM 설계와 엔지니어링
CoT(Chain-of Thought)
LLM은 예측 모델, 추론에 맞지 않음. 수학, 단어, 상식 추론 등 다단계 추론 어려움. 그래서 추론 과정을 제시해주고 따라서 하도록 함
예제 문제/풀이/답을 제시하고 문제 내면 풀이/답을 따라서 추론하고서 풀어감
image.png
제로샷 CoT
추론 과정을 제시하지 않고 '단계 별로 나누어서 추론해보자'라고 언급하면 LLM이 단계별로 나누어서 추론함
수동 CoT
사람이 세부 단계를 하나씩 써 주는 것
ToT(Tree-of-Thought)
CoT는 1개 논리 흐름이라 잘 못 하면 틀린 결론에 도달.
ToT는 다양한 선택지를 트리로 하나 씩 체크
분기 탐색 + 평가로 다양한 가설 탐색
불확실, 복잡한 문제에 강점
Self-Consistency(자기 일관성)
CoT 여러 번 돌려서 답변 여러개 얻음. 공통 결과를 최종 출력
Reflection
모델이 자체 답변을 검토, 수정해서 출력
Expert Prompting
여러 전문가 답변 종합해서 출력
Chains & Rains
Chain: 워크 플로우 명시(프롬프트 생성 → 모델 호출 → 후처리 → 응답 반환)
Rains: 벗어 나면 안되는 규칙 설정(Guardrails)
APE(Automatic Prompt Engineering)
LLM 이 프롬프트 생성, 프롬프트 검토, 프롬프트 수정해서 프롬프트를 완성해감.
프롬프트 자동 최적화
Transformer 이전(2012~2017)
이미지
AlexNet (2012)
CNN 기반 이미지 인식 시작을 알림, ILSVRC 2012에서 우승
5개의 CNN 계층, 3개의 fully connected 계층으로 구성
이미지 특징 추출 위해 여러 컨볼루션 커널 사용
정규화, dropout 사용
ReLU 사용
image.png
RNN (1990)
순환 구조 도입으로 순차 데이터 처리 가능
장점
시계열 데이터 패턴 학습
가변 데이터 처리 가능
단점
10 step이 max. 장기 의존성 처리 어려움. 데이터 길어지면 기울기 소실이나 기울기 폭발 생김
가장 마지막 것을 가장 중요하게 처리. 의미상 중요도 반영 안함.
순차적 처리로 느림
구조
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
many to one
image.png
one to many
image.png
many to many
image.png
loss: 각 y_i 마다의 합
image.png
input 결과를 모두 하나로 모은 다음 output을 만들어 낸다. 시계열 인코더-디코더 구조
image.png
LSTM (Long Short-Term Memory)
RNN의 Vanishing Gradient 문제 해결 (RNN 10스텝을 넘어서 수천 스텝 가능)
셀 상태, 망각/입력/출력 게이트를 두어서 정보를 선택적으로 제어함
구조 비교
RNN
image.png
LSTM
image.png
image.png
게이트 구조
Sigmod Layer : 정보 반영 비중 조절.
0: X , 1: 전부
image.png
쉘 상태 정보
과거 정보 C_(t-1)를 f_t 비중만큼 통과 + 현재 정보 C_t 는 i_t 비중만큼 통과 = 현재 출력 정보 C_t
image.png
망각 게이트
과거 정보 h_(t-1)와 현재 입력 정보 x_t를 합쳐서 과거 정보 반영 비중 도출. 차단 or 통과
image.png
입력 게이트
현재 정보 C_t의 비중을 적용
image.png
출력 게이트(Output Gate)
O_t: C_t를 tanh해서 -1~1 로 정규화 한 다음 비중인 o_t와 곱해서 해당 정보만 h_t로 출력
image.png
GRU (2014)
LSTM 구조 간소화 하고 성능은 유지
LSTM의 3개 파트를 Reset Gate, Update Gate로 구성
LSTM의 셀 상태 C_t와 결과값 h_t 를 GRU는 h_t로 통합
image.png
Reset Gate
기존 h_(t-1)의 정보를 통과 or 차단
image.png
Update Gate
이전 step의 결과 차단(z:0 )/통과(z: 1)와 현재 step의 결과를 섞어서 현재 step의 최종 결과 h_t 출력
image.png
전제 구조
image.png
image.png
image.png
image.png
VAE (2013)
확률적 생성 모델. 입력 데이터를 latent space로 인코딩하고 이것을 입력과 유사하지만 다른 데이터를 생성
image.png
image.png
AE 는 입력을 가장 잘 나타내는 latent embedding을 얻는 것이 목적. 이를 확인하기 위해 디코더를 이용
image.png
VAE는 입력과 유사한 데이터를 잘 생성하는 디코더를 얻는 것이 목적. 이를 위해 인코더를 사용
image.png
AE는 특정 입력 값에 하나의 Z가 나옴
VAE는 특정 입력 값에 가우시안 분포로 Z가 나옴. 그래서 입력과 비슷하지만 다른 출력이 나옴
image.png
image.png
ResNet (2015)
2014년 22층에서 152층으로 크게 깊어짐
Residual Learning으로 깊어져도 성능 저하 방지
image.png
VGG 보다 성능 우수
그냥 레이어 수를 늘리면 성능이 더 떨어진다.
image.png
Residual Block으로 만들면 미분을 해도 최소 1이어서 Gradient Vanishing 문제가 생기지 않음.
image.png
Bottleneck Design: Residual Block 계산량 줄이기 위해서 1x1 convolution 을 넣는다.
image.png
identity block
image.png
convolution block
x에 1x1 conv 연산 후 F(x)에 더해줌
image.png
radisual 구조와 시험 결과
아래 그림에서 실선은 identity block, 점선은 convloution block
image.png
residual 있는 것이 없는 것보다 에러율이 더 낮다.
image.png
152 layer가 가장 성능이 좋다.
image.png
언어
Seq2Seq (2014)
최초의 기계 번역 모델
image.png
image.png
Seq2Seq with Attention (2014)
Encoder의 모든 hidden state h에 가중치 a를 반영한 c_i를 만들고
Deocder에서는 기존 상태값과 이번 c_i 를 합쳐서 현재 상태 s_i를 만들고 s_i로 현재 단어를 출력한다.
Encoder에서 모든 입력 단어에 대해서 가중치 a를 반영하기 때문에 attention이라 부른다.
image.png
Transformer의 등장 (2017~2019)
Transformer (2017, Google) - Self-Attention을 이용해 기존 RNN보다 병렬 연산 가능
장점
긴 문장 학습 - 어텐션, 포지셔널 인코딩
빠른 학습/추론 - 병렬 처리, 큰 DB 학습 가능
Seq-to-Seq 문제점
순차 처리로 학습 느림
긴 시퀀스 학습 못함
입력 길이 제한
멀리 떨어진 항목은 Gradient Vanishing/Exploding
RNN, LSTM, GRU: 길이 유한. 마지막 단어가 가장 중요
인코더가 입력 전체 임베딩 후 디코더가 생성
image.png
그래서 입력 길이 길수록 추상화 됨
image.png
디코더는 입력 임베딩과 이전 단계의 출력으로 한 단어씩 출력
입력 길이 길수록 추상화 되는 문제
해결안1: 입력값 임베딩 모두를 concat해서 디코더에 입력. 입력 길수록 임베딩 커짐
image.png
해결안2: 디코더가 지금 생성할 단어와 관련된 입력 단어의 임베딩만 받음.
cross attention, self-attention 적용
image.png
현재 출력 단어와 관련된 입력 단어의 가중치를 높이고 나머지는 낮춘다.
image.png
입력 길어져도 성능 유지됨
image.png
Transformer 기본 구조
Cross-attention: 인코더의 출력이 K, V 임. 디코너의 Masked Mulit-head attention의 출력이 Q.
image.png
image.png
image.png
인코더 블록
image.png
디코더 블록
인코더의 특정 세그먼트에 attention을 하는 계층이 추가됨
image.png
Masked self-attention 부분은 오른쪽 토큰을 차단함
image.png
BERT는 일반적인 self-attention이고 GPT-2는 masked self-attention임
image.png
Self Attention 이란?
self-attention은 입력 데이터 내의 단어들 간의 관계를 반영하는 것.
입력 데이터 내의 각 단어를 'Query'와 'Key'로 간주하고, 각 'Query'에 대해 각 'Key'와의 관계를 'Value' 값으로 도출. 아래 예에서 Query 'it'은 Value 'animal'과 관련이 높은 Value 값을 가짐을 도출
image.png
Query에 대한 Key, Value 를 간략한 수식으로 표현할 수 있다.
image.png
V=X * W_V. t시간 이전에 입력된 key 별 상태 s에 방금입력된 q를 곱하고 전에 비중을 반영해서 key별 a를 구한다. 그래서 각 key에 해당하는 value에 해당 가중치인 a를 곱한다. 그러면 해당 key 별 중요도 반영한 v이고 이걸 합하면 q에 대한 attention이된다. 여태까지 중에 중요한 단어인지 아닌지.
image.png
이 q와 a를 반영하면 q에 대한 출력 임베딩(z)가 된다.
image.png
basic self-attentin
각 단어에 대해서 다른 모든 단어와의 attention score(관련도 점수)를 구하고 각 단어와 곱합 합이 해당 단어에 대한 출력이다.
image.png
예를 들어, x_1은 movie, x_2는 user, x_3는 area, x_4는 age 라 할 때
user에 대한 결과 값 = (user와 movie의 연관 점수) X movie + (user와 user의 연관 점수) X user + (user와 area의 연관 점수) X area + (user와 age의 연관 점수) X age
image.png
위 예에서 Query, Key, Value를 적용해보면
여기서 user가 Query, x_1 ~ x_4 가 Key, user에 대한 결과 값이 Value 이다.
즉, 알고자 하는 입력값이 Query, 관련 되는 모든 값들이 Index라 각각에 대해서 다 훝어 보고 결과 값이 Value.
알고 싶은 단어 Query를 사전 index(Key) 전체를 훝어보면서 찾은 후 해당 페이지에 나와 있는 설명(결과 값)이 Value임.
self-attention으로 W를 적용해서 Query, Key, Value를 정확하게 다시 표현하면 아래와 같다. x2가 Q, x3가 key, value
image.png
image.png
Query, Key, Value란?
image.png
Query: 입력 토큰, Key: 콘텐트 인덱스, Value: 각 콘텐트들의 내용
Query: "입력 토큰" 과 관련 있는 다른 단어는?
Key: "인덱스"에 따라서 후보 토큰들을 죽 나열함
Value: 입력 토큰에 관련이 높다고 판단된 "토큰 선정 결과"
image.png
Q, K, V 각각의 크기는 B(배치 크기(txt 개수, 이미지 개수)) X L(길이, txt의 토큰 수, 이미지 패치 수) X d(임베딩 차원, 토큰 1개나 이미지 패치 1개의 임베딩의 크기). 즉, d 차원짜리 임베딩 몇 개로 구성된 데이터가 몇 개인지가 Q, K, V의 크기임.
image.png
X는 입력 데이터 1개(입력 txt 1개, 입력 이미지 1장)의 임베딩. n은 데이터 1개의 토큰의 개수(또는 이미지 패치의 개수)
image.png
적절한 Key를 찾기 위해 Query와 Key간의 코사인 유사도(cosine similarity, -1 ~ +1)를 구한다.
image.png
image.png
Query, Key, Value 모두에 input embedding과 positional encoding을 합한 embedding을 입력함. 동일한 값이 입력됨.
'Hi, How are you?'입력 받으면 'I am fine.'을 출력하는 예를 보자.
image.png
'Hi, How are you?'를 input embedding으로 만들고 positional encoding을 더해서 positional-aware embedding을 만든 후 트랜스포머의 linear layer에 넣음. positional-aware embedding은 6X5 크기.
image.png
Linear layer는 6X3크기. positional-aware embedding과 linear layer를 곱하면 6X3이 됨. Query, Key, Value모두 이 작업으로 6X3이 됨.
Multi-Head Attention이란?
Multi-head attention은 attention을 여러 가지로 적용한 것임. self-attention은 하나는 하나의 관점에서 중요도를 판별하므로 다양한 관점을 가진 여러 attention을 적용하여 더 풍부하고 다차원적인 데이터 표현을 얻는다.
image.png
각 attention은 각자의 attention filter를 만들어 낸다. Value가 이 필터들을 통과 하면 필터링된 Value 들이 생긴다. 이 value 행렬을 concatenate해서 linear layer에 통과 시켜서 원하는 출력 크기로 맞춘다.
attention 행렬을 attention head라 부른다. 여러 attention head를 사용해서 병렬로 사용하면 다른 시각으로 정보들을 수집할 수 있다.
그래서 입력 토큰 셋에 대해서 query 셋, key 셋, value 셋으로 self-attention하는 것을 여러 개 한 것이 multi-head attention임
각 attention에서의 결과를 concat한다.
image.png
Q, K, V마다의 W가 다양한 버전으로 준비되어 있다. Q, K, V와 W가 곱한 것이 attention head이고 W가 다양하게 여러 개라 여러 가지의 attention head가 나와서 multi head adttention이라 부름. W는 W_k, W_v, W_q 각각 있음.
image.png
image.png
image.png
image.png
multi-head의 출력은 attention head를 concatenate한 것에 가중치 행렬 Wo를 곱한 결과인 multi-head attention matrix이다.
image.png
단어 임베딩
문장을 토큰화함. 각 토큰은 voc id로 매핑. voc id는 embedding matrix에서 해당 id의 임베딩으로 변환.
positional encoding이란?
transformer에서는 병렬로 입력 되기 때문에 RNN과 달리 순서가 없다. 동일 단어가 반복해서 나오더라도 구분을 할 수 있도록 위치 정보를 추가한다.
image.png
image.png
attention에서는 순서 정보를 고려하지 않으므로 입력 값의 순서/위치 정보를 positional encoding에 담아서 input embedding에 더해준다. postional encoding은 input embedding과 dimension이 같다.
image.png
p번째 단어의 positional encoding은 아래와 같다.
짝수번째 위치는 sin함수 값으로 임베딩을 하고
홀수번째 위치는 cos함수 값으로 임베딩을 한다.
무한한 길이를 나타내지는 못한다.
image.png
image.png
'I love you but not love him'에서 두 'love'는 input embedding의 값은 동일하여 구분이 안 되지만 positional encoding을 더해주면 위치정보가 반영되어 다른 embedding이 된다.
입력 단어 X = 토큰 임베딩 + 위치 인코딩
Scaled Dot-product Attention의 연산
image.png
Query와 Key는 Scaled Dot-product Attention의 입력으로 들어감. 둘 간의 유사도 계산. MatMul -> Scale -> Mask -> SoftMax -> Value와의 MatMul 을 진행
Query와 Key의 MatMul
첫 번째 dot product결과는 attention filter라고 부름
query(6X3)과 Key(3X6)을 dot product한 결과 matrix(6X6)을 attention filter라고 함.
image.png
Scale
학습을 하고 나면 attention filter는 유의미한 값들을 가지게 되며 attention score이 된다.
dot product의 분산이 차원수에 비례해서 커지기 대문에 차원수의 제곱근으로 나누어서 스케일링함.
이 attention score를 root(d)로 나누어 scaling을 함. d는 Key의 dimension이므로 여기서는 6.
image.png
Mask
optional한 부분임. 입력 값이 word인지 아닌지 여부를 masking을 통해 구분함.
SoftMax
image.png
위 scale한 값을 softmax layer에 통과 시켜서 앞에서 구한 attention score를 0또는 1로 바꿈
image.png
위 그림에서 배경이 제거된 그림만 남기는 것 처럼 attention score를 Value와 내적하고나면 필요한 정보만 남기고 나머지는 제거된다.
Value와의 MatMul(Dot product)
image.png
seq2seq attention에서 F(encoder output)과 alpha vector를 내적해서 attention의 결과인 context vector로 사용하는 것 처럼, Transformer에서는 Value와 {Query와 Key로 만든 Attention Score}를 내적해서 Context Vector로 사용한다.
Self-Attention의 위 다섯 단계를 수식으로 나타내면
image.png
Posision-wise fully connected Feed-Foward NN
포지션-와이즈 FFNN은 인코더와 디코더에서 공통적으로 가지고 있다.
attention layer의 결과 값은 fully connected Feed-Foward network를 지나간다.
image.png
image.png
Feedforward network 연산 과정은 multi-head attention matrix인 x에 가중치인 W_1을 곱해서 F_1을 얻는다. 이것을 ReLU를 통과 시켜서 음수는 0으로 마스킹한다. 이것에 가중치 W_2를 곱해서 출력한다.
image.png
W_1, b_1, W_2, b_2는 하나의 encoder layer 내에서는 다른 문장, 다른 단어가 들어와도 동일한 값으로 사용한다. 하지만 encoder layer마다는 다른 값을 가진다.
image.png
Transformer에서는 인코더 내에서 Residual connection과 layer normalization을 한다.
image.png
잔차(Residual connection)은 아래 그림과 같다. Vision에서의 표현인 H(x) = x + F(x)를 여기서의 표현으로 바꾸면 x+Sublayer(x)로 표현한다.
image.png
residual connection을 거친 결과는 이어서 layer normalization을 한다.
layer normalization(NL으로 표기)은 아래와 같다.
NL = LayerNorm(x+Sublayer(x))
layer normalization은 텐서의 마지막 차원에 대해서 평균과 분산을 구하고, 이를 이용해서 정규화 해서 학습을 돕는다.
여기서 마지막 차원이란 d_model 차원이며 d_model 차원의 방향과 평균, 분산 구하는 형태는 아래 그림과 같다.
image.png
image.png
layer normalization은 평균과 분산을 통한 정규화 단계와 감마와 베타를 도입하는 단계로 구성된다.
평균과 분산을 통해 x_i를 정규화 한다.(엡실론은 분모가 0이 되지 않도록 하기 위한 아주 작은 값)
image.png
이제 γ(감마)와 β(베타)를 준비한다. 초기 값은 각각1과 0이다.
image.png
γ와 β를 도입한 layer normalization의 수식은 다음과 같으며, γ와 β는 학습 가능한 파라미터이다.
image.png
Cross-Attention(인코더에서 디코더로 전달)
image.png
image.png
디코더에서 인코더의 출력과 디코더의 입력 간의 상호 작용을 모델링. 복잡한 문장 구조를 이해하는데 역할. 서로 다른 컴포넌트 간의 정보 교환이라 '크로스 어텐션'이라 부름.
인코더에서 사용자 입력값에 해당하는 'I am a student'라는 문장의 출력 임베딩과 학습을 위한 정답인 '<SOS> Je suis etudiant'의 중간 임베딩을 같이 입력을 받아 학습을 한다.
image.png
encoder는 num_layers개수 만큼 있다. 순차적으로 num_layers만큼 연산한 후에 마지막 encoder의 출력을 decoder에게 전달한다. decoder도 num_layers개라 num_layers 만큼 연산을 하는데 이 때 마다 인코더가 보낸 출력을 매 decoder 연산 때 마다 사용한다.
디코더의 첫 번째 층: self-attention, Look ahead attention
image.png
image.png
디코더 역시 인코더와 동일하게 embedding에 positional encoding을 더한 문장 행렬이 입력됨. 그런데 transformer는 한번에 문장 전체를 입력 받으므로 예측해야 하는(현 시점보다 미래에 있는) 단어들은 학습할 때 참고하지 못하도록 look-ahead mask를 적용했다.
look ahead mask 는 첫 번째 서브층인 multi-head self-attention 층에서 이루어진다. attention scroe matrix에 masking을 적용해서 연산한다. 현재 자신 보다 미래에 있는 단어는 참고하지 못하도록 아래 그림과 같이 마스킹한다.
image.png
image.png
참고로 encoder의 sefl-attention, decder의 두번 째 sub layer의 encoder-decoder attention 에서와 마찬가지로 디코더의 첫 번째 층에서도 패딩 마스크를 적용한다. 여기서의 패딩 마스크는 look-ahead mask에서 패딩 마스크까지 포함해서 반영한다.
디코더의 두 번째 서브층: encoder-decoder attention
이전의 attention과 같이 multi-head attention이지만 self-attention은 아니다. self attention은 Query, Key, Value가 같은 경우를 말하는데 encoder-decoder attention은 Query가 decoder 행렬인 반면, Key와 Value는 encoder 행렬이기 때문이다.
인코더의 첫 번째 서브층: Query = Key = Value
디코더의 첫 번째 서브층: Query = Key = Value
디코더의 두 번째 서브층: Query: 디코더 행렬, Key = Value: 인코더 행렬
image.png
빨간 화살표 두 개는 각각 Key, Value이며, encoder의 마지막 층의 결과 행렬이다. 검은 입력 화살표인 Query는 디코더의 첫 번째 서브층의 결과 행렬이다.
image.png
transformer block
transformer block은 self-attention, layer normalization, feed forward layer(MLP), 또 다른 layer normalization, 그리고 residual connection(잔차연결)로 구성되어 있다
image.png
활용: 분류
image.png
활용: 텍스트 생성
image.png
언어
image.png
인코더 기반 - BERT와 변형모델(RoBERTa, ALBERT, DeBERTa, XLM, XLNet, UNILM)
BERT (2018, Bidirectional Encoder Representations from Transformers)
Pre-training 후 Fine Tuning 제시
양방향(Bidirectional)으로 파악하도록 self-attention을 설계. 그래서 bank가 강둑인지 은행인지 구분.
BERT 설명: BERT는 텍스트 인코더이다.
단어 의미에 맞는 임베딩을 만들고, 문장이 자연스러워 지는 문장 선후 관계 임베딩을 뽑는다.
문장 간 연속 여부 예측(NSP, Next Sentence Prediction)은 두 문장을 입력 받아서 다음에 오는 문장이 맞는지 여부 판단.
image.png
각 단어를 적합한 의미로 임베딩 하기 위해 단어 앞, 뒤 모두를 감안해서 임베딩을 만든다.
Masked Language Model: 단어를 마스킹한 후 마스킹 단어 앞 부분과 뒷 부분을 모두 참고해서 마스킹한 단어를 맞추는 학습을 함.
image.png
이를 통해 right가 '오른쪽'인지 '옳은'인지 분간해서 적합한 의미의 임베딩을 만든다.
image.png
왼쪽 부분만 보면 right는 '오른쪽'으로 해석되지만 양쪽을 모두 보면 '옳은'의미임을 알 수 있다. 기존 모델은 한쪽만 봤다. BERT는 양쪽을 보기 때문에 단어 의미에 맞게 임베딩을 만들 수 있다.
image.png
문장의 맥락과 선후관계를 감안해서 임베딩을 만든다.
Next Sentence Prediction: 모든 문장에 대해서 현재 문장의 다음에 오는 문장을 맞추는 학습을 함
image.png
BERT 임베딩 구조: 단어 임베딩 + 문장 순서 임베딩 + 단어 위치 임베딩
image.png
활용
활용 분야
문장 분류(단일 문장, 문장 셋의 종류 분류)
Question Answering
특정 문장 다음에 올 적합한 문장을 학습
개체명 인식(Named Entity Recognition, NER)
각 단어를 분류: ex. 이순신 -> 사람, 서울 -> 장소
output 쪽의 linear를 특정 작업에 대한 것으로 넣고 softmax 결과값으로 class 분류 가능.
image.png
모델 종류
BERT Base
transformer의 인코더 부분을 12개 쌓음
임베딩 벡터 크기: 768
BERT Large
transformer의 인코더 부분을 24개 쌓음
임베딩 벡터 크기: 1024
SpanBERT(2019)
BERT는 토큰 단위 마스킹해서 문맥 학습함.
SpanBERT는 스팬(연속 토큰)을 마스킹해서 학습. 길이가 다양한 연속 스팬을 마스킹.
토큰 인덱스: [0] 나는 [1] 학교에 [2] 간다
스팬(1–1): "학교에"
스팬(0–2): "나는 학교에 간다"
나머지 토큰화나 구조는 BERT와 동일
RoBERTa(2019)
BERT를 학습 엔지니어링 만으로 성능 향상 시킴
BERT 보다 큰 DB로 학습
BERT: 3.3B 단어, 16GB 텍스트. 백과사전·전문서적 중심
RoBERT: 10B 토큰, 160GB 텍스트. 뉴스·웹·스토리도 추
문장 간 연속 여부 예측(NSP, Next Sentence Prediction) 안 함
masked language model에 집중
BERT는 마스킹 패턴 고정. RoBERT는 매 에포크 마다 마스킹 위치 변경
더 다양한 문맥 예측 학습
활용
성능 큰 폭 향상
Hugging Face Transformers 라이브러리에서 공유해서 다양하게 활용(감정 분석, 문서 분류, QA, NER 등)
ALBERT (A Lite BERT, 2020)
BERT 모델 크기 줄이고 속도 개선
임베딩 행렬을 두개의 작은 행렬로 분할
BERT의 V x H 를 V x E + E x H 로 나눔. 모델 크기를 ~90% 축소
V는 단어(vocaburary), H는 Hidden representation이다. BERT는 학습 때 마다 V x H(=30000 x 768 = 약 2천만)를 연산하고 업데이트 한다. 대부분 0인 스파스 행렬이므로 V x E + E x H = 30000 x 128 + 128 x 768 = 약 400만으로 행렬 크기를 줄였다.
가중 공유로 GPU 메모리 절약
12층 트랜스포머 가중치를 다 같이 공유. Feed-forward 레이어, Self-attention, LayerNorm 등 모든 구성요소를 공유해서 가중치 1셋만 유지함.
문장 순서 예측 학습
문장 연속 여부 판단(NSP(Next Sentence Prediction)) 대신 문장 순서 예측(SOP, Sentense Order Prediction)하도록 학습
두 문장을 원래 순서, 바뀐 순서를 넣고 순를 맞히게 함. 문장간 관계를 이해함.
ELECTRA(2020, Efficiently Learning an Encoder that Classifies Token Replacements Accurately)
기존 BERT, SpanBERT, RoBERT, T5 모두 MLM(Masked Language Modeling) 즉, 마스킹 한 부분을 채우는 방법이다. 제대로 채우려면 내용도 같이 학습해야해서 상당한 양의 코퍼스가 필요하다.
ELECTRA는 작은 생성기가 마스킹된 단어를 적당한 다른 단어로 바꿔 놓고 모델은 단어 교체 여부를 판단하는 학습을 한다. 교체된 단어임을 판단하려다보니 일부 토큰이 아닌 입력 토큰 전체에 대해 맥락을 학습하게 된다. 그래서 결과적으로 단어 채우는 것은 쉬운 일이 되어서 기존 모델보다 더 성능이 좋다.
image.png
image.png
4일학습으로 GPT(30배 더 학습) 보다 우수하고, RoBERT, XLNet에 비해 1/4 연산만으로 성능 달성.
즉, 더 작은 모델, 적은 연산, 더 빠른 학습.
image.png
XLM
BERT: 단일 언어 pre-trained 모델
mBERT: 여러 언어를 독립적으로 학습.
XLM: TLM으로 언어간 의미 정렬을 강화
MLM (Masked Language Modeling) 학습 방법과 TLM (Translation Language Modeling) 학습 방법을 번갈아 가면서 학습함. MLM은 마스킹 한 단어를 맞추는 학습. TLM은 영어 문장, 동일한 의미의 프랑스어 문장을 이어 붙여서 입력하되 랜덤하게 마스킹 후 마스킹한 단어를 맞추는 학습. TLM에서 영어의 마스킹을 맞추기 위해 영어의 나머지 단어와 프랑스어 문장을 모두 살펴봄. 램덤 마스킹이라 영어 마스킹한 단어가 프랑스어 문장에서는 남아 있기 때문에 해당 단어를 참조할 수 있다. 그래서 MLM에서 영어 또는 프랑스어 문장의 나머지 부분에서 마스킹 단어 추론하는 훈련을 하고, TLM에서 언어간 문장 연관성, 단어 연관성을 학습함.
그래서 영어와 프랑스어 모두 동일의미의 단어는 비슷한 임베딩 공간에 위치하게됨.
image.png
UNILM(Unified pre-trained LM)
모델을 양방향, 단방향, 시퀀스-to-시퀀스 예측 방법으로 사전 학습. 그래서 NLU (Natural Language Understanding, 자연어 이해), NLG (Natural Language Generation, 자연어 생성) 모두 잘 함. 그래서 다양한 작업에 대응 가능함.
image.png
디코더 기반 - GPT
GPT (Generative Pre-trained Transformer)
핵심 아이디어
un-labeled data로 대규모 사전 학습 후 소규모 labeled data로 파인 튜닝하는 방법을 처음 제시
중요한 의미
범용 언어 모델 개념을 처음 대중화
파인튜닝 학습 데이터로 '프롬프트 + 원문' 형태 제시
출력 헤드 바꾸지 않아도 다양한 분류, 추론, QA 가능함을 보여줌
한계
좌-우 단방향이라 문장 앞, 뒤 전체 정보 활용 못함
데이터, 모델 소규모(8B 토큰, 110M 모델)
테스크 마다 파인튜닝 필요
GPT도 ELMOUMLFit 처럼 다음 단어를 예측하는 모델이다.
BERT는 양방향 transformer, GPT는 왼쪽에서 오른쪽으로 transformer, ELMo는 오른쪽 모델, 왼쪽 모델
image.png
GPT-2 (2019, OpenAI)
문맥을 더 잘 이해하는 생성형 언어 모델
데이터 규모 확대(700MB -> 40GB), 모델 크기 확대(110M -> 1.5B) 한 덕분에 LM 사전학습만으로 다양한 작업과 제로샷 가능함을 보임
장점
장문 생성
제로샷 번역, QA, 요약 가능
소스 오픈
적은 GPU로도 파인튜닝, 지식 증류 가능
한계
1024 토큰 제한
추론 능력 부족
편향, 부적절 내용 생성
트랜스포머는 인코더, 디코더 모델이다.
image.png
GPT-2는 디코더 모델이다. BERT는 인코더 모델이다.
image.png
gpt-2-autoregression-2.gif
image.png
GPT-2 디코더는 BERT와 다르게 self-attention이 아니라 Masked self-attention임.
image.png
GPT-2는 아래와 같은 트랜스포머 디코더 블록을 활용(디코더 블록 6개로 구성)
image.png
입력 단어를 토큰으로 나눔. 각 토큰은 vocaburary id로 매핑. 해당 voc id는 임베딩 행렬(단어별 임베딩을 모아놓은 행렬)로 임베딩 행렬로 변환.(토큰당 임베딩 크기는 768)
image.png
시작 토큰 임베딩과 posisional encoding 벡터를 합쳐서 첫 번째 블록으로 전송함. positional encoding은 1024개 위치 중 어디인지 표시함. 임베딩의 크기는 모델 크기에 따라 다름
image.png
1024개 위치 중 첫 번째 위치에 <s>를 넣고 <s>의 임베딩과 이 위치를 나타내는 positional endoing을 합쳐서 첫 번째 transformer 블록에 넣음
image.png
각 디코더 블록은 masked self-attention을 거쳐서 신경망 layer를 통과함. 이런 블록 12개를 통과함.
image.png
masked self-attention 요약
신경망 layer로 보내기 전에 입력 단어들의 맥락을 이해하고 중요도를 표시함. 아래 예에서 it에 대해서 a robot에 attention 값을 높게 설정함.
image.png
Self-attenton 처리
Query: 현재 처리 중인 토큰
Key: 세그먼트에 있는 모든 단어의 레이블
Value: 해당 단어의 의미
현재 단어를 모든 Key와 비교해서 가장 관련 높은 key를 선택하고 해당 key에 대한 value 값을 얻는다.
image.png
위의 예에 대해서는 it이라는 query vector를 모든 key(a, robot, must, obey, ..) 벡터로 곱한 후 소프트맥스를 하면 각 Key의 attention 값이 나온다.
image.png
이 attention 값을 각 key에 대한 value vector에 곱하면 중요한 벡터 위주로 남고 이것을 모두 더한다.아래에서는 robot에 50%, a에 30%, it에 19%의 주의를 기울인다.
image.png
Model output
마지막 블록을 통과한 벡터를 임베딩 행렬과 곱한다.
image.png
이 임베딩 행렬은 모든 단어에 대한 임베딩이다. 각 행은 한 단어의 임베딩이다.
image.png
임베딩 행렬과 곱하면 점수가 나온다. 이 점수를 확률로 보고 상위 K개(40개)에 중에서 확률에 따라 선택을 함. 이 선택한 ID에 해당하는 단어를 현재 단어로 출력하고 다음 입력으로 넣는다.
image.png
이것을 종료 토큰이 나올 때 까지 반복함
시간 되면 첨부 자료의 보너스 부분도 볼 것
Transformer-XL (2019)
GPT에서 입력 길이 제한을 해결한 모델
GPT 문제점
입력 받은 데이터만으로 학습 진행하는데 입력 길이 길지 않음
아래 (a) 처럼 한 데이터 학습은 다음 데이터 학습과 독립적이다.
그래서 (b) 처럼 긴 코퍼스를 윈도우잉하면서 잘라서 학습을 하더라도 문장이나 컨텍스트가 연결해서 학습 되지 않고 잘린 채로 학습된다.
입력 데이터가 문장의 중간에서 잘리는 경우 학습 정보가 충분하지 않게 된다.
image.png
Transformer-XL에서는 (a)와 같이 이전 입력 데이터에서 학습에 사용한 hidden state를 활용한다. 그래서 더 길게 입력 받아서 학습하는 효과를 얻는다.
position encoding을 상대적인 위치로 나타내어서 이전 hidden state에도 position 임베딩을 부여해서 학습한다.
(b)에서와 같이 뒤에서 앞의 입력 단어를 예측하는 학습도 했다. 양방향 학습을 통해 예측 성능을 높였다.
image.png
인코더-디코더 기반 - T5, BART
T5(Text-To-Text Transfer Transformer)(T가 5개) - 텍스트를 텍스트로 변환하는 통합 모델
기존 문제
NLP 작업(요약, QA, 번역 등)은 형식이 달라 입출력이 제각각이었음.
해결 방안
Text-To-Text 형태로 모든 작업을 통일하여 모델 구조를 간소화 하여 transfer learning 효율을 높였음
대규모 웹 데이터셋으로 pre-training 후 다양한 다운스트림 테스크로 성능을 증명함.
핵심 아이디어와 기여
C4(대규모 웹 데이터셋, Cleaned Colossal Common Crawl) 데이터셋 공개
모델 크기를 키울 수록 성능이 높아진 다는 것을 실험으로 보여줌
마스킹 전략 추가 제시
연속된 단어도 마스킹
한 문장에 여러 군데 마스킹
=> 단어 뿐 아니라 연속된 표현 전체를 생성 가능. 표현이 자연스러워짐
pre-training 후 transfer learning
문장/텍스트 분류(Classification) 및 자연어 이해(NLU)
GLUE(General Language Understanding Evaluation) 벤치마크
CoLA (Corpus of Linguistic Acceptability): 문장이 문법적으로 타당한지(acceptability) 여부를 판별
SST-2 (Stanford Sentiment Treebank): 영화 리뷰 감성(긍/부정) 분류
MRPC (Microsoft Research Paraphrase Corpus): 두 문장이 서로 의역(paraphrase) 관계인지 판단
QQP (Quora Question Pairs): 두 질문이 중복(question pair)인지 판별
STS-B (Semantic Textual Similarity Benchmark): 두 문장의 의미 유사도를 회귀 점수(0~5)로 예측
MNLI (Multi-Genre Natural Language Inference): 가설(hypothesis)이 전제(premise)와 ‘함의(entailment)’, ‘모순(contradiction)’, 또는 ‘중립(neutral)’ 관계인지 판별
QNLI (Question Natural Language Inference): 질문과 문장(문서) 쌍이 정답이 되는지 여부 확인
RTE (Recognizing Textual Entailment): 전제-가설 관계를 ‘함의/불함의’로 구분
WNLI (Winograd NLI): 대명사의 지시 대상 해석(지시어 추론)
SuperGLUE 벤치마크
BoolQ: 질문에 대해 문서가 제공되었을 때 ‘예/아니오’로 답변
CB (CommitmentBank): 문장이 참인지, 거짓인지, 확실치 않은지 판단
COPA (Choice of Plausible Alternatives): 주어진 상황에 대해 원인/결과 중 더 그럴듯한 문장을 고름
MultiRC (Multi-Sentence Reading Comprehension): 여러 문장을 읽고 질문에 대한 참/거짓 문항 응답
RTE: SuperGLUE 버전의 텍스트 함의 과제
WiC (Word-in-Context): 특정 단어가 두 문맥에서 같은 의미인지 판별
WSC (Winograd Schema Challenge): 대명사의 지시 대상을 올바르게 식별
ReCoRD: 쿼리-패시지 쌍 기반 클로즈 테스트(cloze) 형식 질문 답변
QA(Question Answering)
SQuAD (Stanford Question Answering Dataset): 문서에서 정답 스팬을 찾아내는 QA
Natural Questions: 구글 검색 결과(위키피디아)에서 자연스러운 질문의 정답 스팬 찾기
TriviaQA, SearchQA 등(논문 내 여러 오픈/클로즈북 QA 세트 실험 포함)
요약
CNN/Daily Mail: 뉴스 기사 요약
XSum: 영국 BBC 뉴스 기사 단문 요약
번역
WMT (워크숍 온 머신 번역) 데이터셋
예: WMT’14 En→De(영어→독일어), En→Fr(영어→프랑스어) 등
Transformer 기반 LLM 확장에 기여(BART, GPT 등)
BART (Bidirectional and Auto-Regressive Transformers) 
인코더 - 양방향으로 읽어서 문맥 파악. 빈간 채우기. 교정
디코더 - GPT(앞 문장 보고 이어서 쓰기)
일부 원고, 훼손 원고 교정, 번역, 요약, QA 등
이미지
초거대 LLM 시대 (2020~2022)
이 시기는 **초거대 언어 모델(LLM)**이 등장하며 AI가 실생활에서 활용되기 시작한 시기입니다.
LLM은 수십업(1B)~수천억(900B) 규모의 PLM(Pre-trained LM)
GPT-3 (2020, OpenAI)
175B
파인 튜닝 없이 다양한 다운스트림 작업에 적용 가능
프롬프트 기반 학습(zero-shot, one-shot, few-shot)
별도 파인튜닝 없이 입력 예시만으로 즉석에서 문제 풀이. In-context learning이라는 개념을 대중화
image.png
인간 피드백을 통한 강화 학습(RLHF)으로 진실성 향상, 유해 출력 감소
image.png
주요 특징
스케일을 기하급수적으로 늘리면 성능이 크게 증가
범용성 모델(번역, 요약, 추론, 프로그래밍, 문학 창작 등)
API 제공: 모델 비공개
안전성 연구 촉발: 환각, 편향에 대한 윤리 연구 가능
ChatGPT 출시 - LLM의 중요한 이정표. LLM의 상용화 모델 제시
In-context Learning
추가 파라미터 업데이트 없이, 입력 프롬프트 안에 주어진 몇 개의 예시(demonstrations) 를 보고 새로운 문제를 해결하는 능력
기존 문제점
fine-tuning으로 학습을 해서
대량 labeled dataset 필요
pre-trained로 학습한 내용 사라짐
해결 방안
모델 크기를 키워서(GPT-2는 1.5B, GPT-3는 170B)
image.png
Zero shot, One shot, Few shot 학습을 할 수 있게 함
image.png
모델이 클 수록, 제시하는 샘플 수가 많을 수록(zero < one < few) 성능이 잘나옴
image.png
one-shot, few-shot이 fine-tuning한 BERT 보다 성능 잘 나옴
image.png
GPT3 논문
Language Models are Few-Shot Learners
장점
대화, 번역, 요약에 탁월
단점
범용적으로 잘 풀지만 각 분야 전문 모델 보다는 못하다
현실 세상(물리적 실세계)을 잘 모른다.
기억을 못한다. 해당 입력 값에 대한 출력만 할 뿐. 별도 정보를 활용하지 않는다.
단어 예측의 한계. 다음 단어를 선택할 뿐 의미 기반 대답이 아니다.
GPT-3.5, ChatGPT(2021~2022)
기존 문제
인터넷 상의 데이터만을 학습 하여 현실적이지 않거나 피상적인 대답을 한다.
해결 방안
RLHF(Reinforcement Learning from Human Feedback)을 통해 지속적으로 인간의 피드백을 반영하여 성능을 향상시킴
1단계: SFT(Supervised Fine-tuning)
2단계: GPT의 응답에 대해 사람이 평가를 함. 사람 처럼 평가하는 모델인 RM(Reward Model)을 학습시킴
3단계: GPT를 RM을 이용해서 강화 학습으로 파인 튜닝 지속함
image.png
장점
긴 대화나 텍스트에서 문맥을 잘 유지하면서 적절한 응답을 생성
논문
Training language models to follow instructions with human feedback
논문
Machine intuition: Uncovering human-like intuitive decision-making in GPT-3.5 => Thinking Fast and Slow in Large Language Models (논문 명 변경)
알파카
2023.3
text-davinci-003로 만든 52K 데이터로 LLaMA 7B를 Fine-Tuning하여 text-davinci-003과 유사한 성능 확보
RLHF 실험 비용을대폭절감. 600USD로 학습.
'작은 모델, 저 비용 -> 고품질 모델' 가능성 입증.
비쿠나(Vicuna)
2023.3
Vicuna 13B. GPT 품질의 90% 달성
LLaMa 2 7B/13B 기반 파인 튜닝. shareGPT 데이터 및 증강본 활용.
학습 비용 300 USD
경량화 배포 - - 4bit, 8bit 양자화, GPTQ, GGUF 제공
라이센스: 상업 가능
과나코(Guanaco)
QLoRA로 65B 모델을 48GB GPU에서 fine-tuning
QLaRA
4bit NF4 양자화: 정규분포 가중치에 최적화한 데이터 타입
Double Quntizatoin: 양자화를 2번 해서 메모리 추가 절감
Paged Optimizaers: AdamW 등의 옵티마이저 상태를 디스크 처럼페이징해서 메모리 스파이크 제거
LoRA: 원본 모델은 동결하고 L x R 차원 행렬(64 x 64)만 학습
24시간 학습으로 ChatGPT의 99.3% 수준 도달
라이센스: 연구용
코알라
2023.4
LLaMA 7B, 13B에 6시간 Fine-Tuning 만으로 ChatGPT 수준 도달
고품질 4.3 M 토큰 만 학습
ShareGPT 60 K
OIG, Alpaca 52 K, Anthropic HH 160 K, WebGPT 20 K, Summarization 93 K
라이센스: 연구
미스트랄
작고 빠른 고성능 모델을 개방적으로 공급. 유럽, 오픈소스 친화
Mistral 7B
GQA(Grouped-Query Attention)
QKV 중 KV 헤드를 그룹화해서 동일 자원으로 2배 이상 처리량 향상
SWA(Sliding-Window Attention)
긴 문장에서 로컬+글로벌 윈도를 교차 적용. 메모리 감소
LLaMA 2 13B 능가
Mixtral 8x7B
Sparse MoE
레이어 마다 8개 FFN 전문가 중 2개만 활성화. 속도, 효율 극대화
LLaMA 2 70B 상회, GPT-3.5 수준
Mixtral 8x22B
대형 SMoE, 65 K 토큰입력
가성비 최고
라이센스: 상업 가능
PaLM Familly
PaLM(Pathways language Model). Google
PaLM
2022.4
Dense 디코더 트렌스포머 기반. 540 B
Pathways 분산 학습 시스테믕로 TPU 6,144 개로 학습
학습 데이터: 고품질 텍스트 780 B 토큰, 자연어, 코드, 다국어 학습
SOTA 달성
U-PaLM
2022.10
PaLM 대비 절반의 TPU로 유사 성능 도달
'데이터 늘리기 -> 다양한 방식으로 학습' 으로 전환
MoD(Mixture of Denoisers)
Seq-to-seq 디노이징 50% (앞 부분을 보고 뒷 부분 맞추는 학습)
Random-span masking 25%: T5식 양방향 이해 능력 적용
Extreme 긴 스팬 masking - 장거리 추론, 샘플 효율 향상
3가지 방법으로 학습하여 언어 이해, 생성, 채워넣기 모두 학습 함.
PaLM 2
2023.5
PaLM 대비 빠른 학습, 작은 모델, 번역, 코딩 수학 까지 가능한 올라운더 LLM
다양한 데이터를 다양한 방식으로 학습하여 성능 향상
데이터만 다양하게 늘리면 아는 것만 많아짐
학습 목표도 다양하게 섞어 줘야 1개 모델이 읽기, 쓰기, 삽입, 번역 등 다양한 역할 모두 잘 함
다중 목적(mixture-of-Objects) 학습: 학습 목표를 섞음
기존
GPT: seq-to-seq. 좌를 보고 우 토큰 예측
BERT, T5: 마스크된 토큰 복원
번역 모델: 입력 문장 -> 출력 문장
MoO 적용(U-PaLM 의 MoD 에 3개 추가)
Seq-to-Seq 디노이징
Random-span masking
Extreme 긴 스팬 masking
미니 배치 마다 위 3개중 하나를 확률적으로 선택해서 적용
Translation denoising: 번역용
Code span-corruption: 코드용
Math Chain-of-Thought: 수학 추론용
Med-PaLM 2
의료용 PaLM. MedQA에서 86.5% 점수 확보
기타 대표 LLM
RETRO(Retrieval-Enhanced Transformers)
2022
모델 규모 증가 대신 '외부 지식 검색해서 LLM에 입력'이라는 우회로를 보여준 논문.
7.5 B 모델로 175 B 모델(GPT-3, Jurassic-1)에 맞먹는 성능 달성.
64 토큰 마다 Top-k 이웃(기본 2개)을 토큰 DB에서 실시간 검색하여 cross attention으로 융합.
해결 과제
이전 LLM은 모델 규모 증가로 성능 향상시켜왔음. 학습 비요아 메모리, 탄소 발생이 기하급수적으로 증가하게됨
해결 방안
'모델 = 지식 저장소'라는 관행을 깨고, 필요할 때 외부 메모리(DB)에서 검색하여 훨씬 작은 모델로 기존 성능 달성
구조
오프라인: DB 구축
2조 토큰을 64 토큰씩자른 뒤 BERT 문장 임베딩을 키로 ANN 인덱스를 만듦
ANN 인덱스(Approximate Nearest-Neighbor Index)란?
고차원 벡터 공간에서 “가장 가까운 이웃(Nearest Neighbor)” 을 완벽히 찾을 때 드는 계산량을 줄이기 위해, “충분히 가까운(Approximate)” 후보를 빠르게 찾아 주도록 미리 구축해 두는 전용 자료구조·알고리즘
핵심 아이디어
1. 벡터 공간을 '거칠게' 잘라서 후보군을 좁힘
2. 후보군만 정밀 스코어링(Cosine, L2 등) 해서 Top-k 반환
3. '근사'라서 100% 정답은 아니지만 Recall(재현율)을 95~99%로 잡고 latency, 메모리, 비용으로 튜닝
ANN 인덱스 활용처
LLM + Retrieval : RETRO, RAG, A2A 검색
추천, 랭킹 : user-item 매칭, embedding-based search
멀티미디어 : 이미지/음원 유사 검색, CLIP 백터 탐색
바이오, 과학 - 단백질 구조 벡터, 대규모 시뮬레이션 특이점 탐색
보안, AIOps : 로그 임베딩 유사도 기반 이상 탐
온라인: 실시간 검색 & 생성
매 64 토큰 쿼리 청크마다 Top-k(기본 2개) 이웃과 그 다음 64 토큰을 가져와서 디코더가 cross attention으로 쓴다. 이중화된 ScaNN/FAISS 색인 구조와 배치 검색으로 1~2ms 내 생성함. 디스크 용량은 93 TB
image.png
성능
스크린샷 2025-05-03 190908.png
RAG 대비 차별점
스크린샷 2025-05-03 191030.png
GLam(Generalist language Model)
2021
1.2T 모델이지만 sparsely-activated MoE(Mixture-of-Experts) 구조 덕분에 토큰마다 단 8%(97B)만 계산함. 그래서 GPT-4(175B)보다 더 높은성능을 보이면서도 훈련 에어지 소비는 1/3, 추론 FLOP은 1/2 이하로 절감함
64개 전문가로 구성된 MoE 레이어를 구현
스크린샷 2025-05-03 230713.png
각 MoE 층(아래 블록 FFN)은 Transformer층(위 블록)과 교차로 배치되어 있다. 입력토큰(ex. 'roses')마다 Gating모듈이 64개 전문가 중에서 가장 관련성이 높은 두 전문가를 동적으로 선택하며, 이는 MoE 층의 파란색 격자로 표시된다. 선택된 두 전문가의 출력에 가중평균을 취한 결과가 상위 Transformer 층으로 전달된다. 입력 시퀀스의 다음 토큰에 대해서는 또 다른 전문가가 선택된다.
MoE(Mixture of Experts) 기술적 의의
조건부 계산
입력마다 일부 전문가만 활성화 -> 활성 파라미터 수가 계산량을 규정 -> 용량과 연산량 분리
토큰 수준 Top-2 Routing
토큰이 자신에게 가장 적합한 전문가 2개를 선택, 가중 합산하여 다음 레이어로 전달. 균형잡힌 부하 분산이 핵심
GShard-Switch Transformer와의 차이
GLaM은 더 깊은 MoE 적층과 노이즈-top-2를 선택해 품질, 로드밸러스 안정성을 모두 확보
깊은 MoE 적층이 주는 효과
모델 용량과 연산량 간 관련성 분리를 더 극적으로 달성(1.2T 모델에 연산은 8%만 활용)
매 층에서 전문가 조합 다양성이 누적되어서 언어, 도메인 다양성 대응력 향상
MoE 구조에서 토큰 분포 편향 때문에 일부 Expert는 폭주하고 나머지 Experts는 샘플이 부족해서 dead expert가 생기는 현상이 있다.
이를 방지하기위해 가우시안 노이즈를 추가해서 해당 Expert와 가우시안 확률로 다른 Expert가 선택되도록(해당 Experts또는 유사한 Expert일수록 높은 확률을 가지고 상관없는 Expert는 낮은 확률로 선택되도록)한다. 그래서 보다 (관련이 높은) 다양한 Expert들이 활용되도록 해서 각 토큰이 각 Experts에 고르게 가도록 한다.
이를 통해 GLaM은 전문가 사용 표준편차가 Switch 대비 40% 감소했고, 학습 불안정, 수렴 지연을 크게 줄였다.
장점
더 높은 정확도, 낮은 연산 비용
전문가 간 병렬성으로 TPU 클러스터 활용 효율 향상
스케일링 한계 돌파
이후 PaLM, Gemini 1.5, Mixtral 등 신형 MoE LLM 설계의 선구적 모델
한계점
전체 1.2T 모델을 VRAM/RAM에 상시 올려 놓아야 함
게이트-통신 오버헤드, 라우딩 불안정 시 훈련 난이도 상승
프레임워크, 라이브러리(GShard-Mesh) 의존도 높아서 범용 GPU 호환성 높지 않음
LaMDA(Language Models for Dialog Applications)
2022
대화 특화 초대형 언어 모델, 품질, 안전, 사실성을 기준으로 파인튜닝과 재랭킹 체계를 도입.
말이 통하는 챗봇을 목표로 설계.
토픽 전환, 장기 기억, 지식 인용 능력을 강화
스크린샷 2025-05-04 163147.png
파인튜닝·재랭킹 파이프라인
생성 -> 후보 N 개 -> 안전 필터 -> 사실성 근거 연결 -> 랭킹(최종 응답 선택)
OPT(Open Pre-trained Trasformer)
2022, Meta AI
디코더 전용 대규모 언어 모델, GPT-3와 유사한 성능, 코드, 모델, 로그 모두 공개(비상업적 라이센스)
스크린샷 2025-05-04 164338.png
Chinchilla - 모델 크기보다 데이터 양을 늘리는 것이 효율적임을 제시
2022, DeepMind
다양한 조합의 모델을 총 400개 이상 학습. 예산을 기준으로 최적의 모델과 학습 세트 크기 공식 도출. 대부분의 LLM이 학습 부족 상태임을 밝힘
image.png
70B 짜리 디코더 트래스포머인데 1.4T 데이터로 학습해서 같은 계산량&예산 모델(Gopher 280B) 보다 더 높은 정확도 보임.
그래서 모델 크기보다 데이터 양을 늘리는 것이 효율적임을 제시
Chinchilla scaling 법칙 제시
새 손실 스케일링 법칙
스크린샷 2025-05-04 165341.png
Compute-optimal 조건
스크린샷 2025-05-04 165411.png
Galactica - 3일만에 서비스 중단
2022, MetaAI
과학 전용 LLM
성능은 높았지만, 허위 정보 생성 논란으로 3일만에 서비스 중단.
이로 인해 인스트럭션 튜닝, RAG, 외부 검증 파이프라인 연구가 가속화 됨
CodeGen
2022, Salesforce AI Research
오픈소스 코드 생성 LLM
학습 데이터 커리큘럼
The Pile 825GB - 기본 언어 이해 능력 확보
BigQuery code(341 GB) 6종 언어 - 범용 프로그래밍 패턴 학습
BigPython 217 GB - Python 특화 파인 튜닝
다중 턴 프로그램 합성
하나의 문제를 2~5개의 서브 프롬프트로 분해해 순차로 해결하도록 구성. 성능 8p 추가 향상.
프롬프트 분할이 탐색 공간을 줄여 성능을 높임
Alphacode
DeepMind에서 github로 학습. 매개변수 400억개. Codeforce 경진대회에서 평균이상 점수 획득.
모델의 출력을 필터링(모델, 검증 프로세스)
image.png
Sparrow
2022, DeepMind
70B 대화형 LLM, RLFH(인간 피드백 기반 강화 학습)에 규칙-조건 보상 모델과 증거 제시 기능을 추가.
안정성 높은 성능
image.png
UL2(Unifying Language Learning)
2022, Google Research
Mixture-of-Denoisers(MoD)를 제안
이후 U-PaLM에서 MoD 활용
image.png
BLOOM (BigScience Large Open-science Open-access Multilingual)
2022, Hugging Face 주도 국제 공동 연구
연구용 다국어 LLM, 176B
디코더 전용 트랜스포머. 46개 언어 & 13개 프로그래밍 언어
BLOOM은 Pre-LN(Layer Normalization) GPT 구조에 ALiBi 위치 바이어스와 StableEmbedding LN을 결합한 70-층, 176 B 거대 디코더-전용 모델이다. Megatron-DeepSpeed 기반의 8 × 텐서 + 8 × 파이프라인 병렬이 핵심 엔지니어링 포인트
ALiBi 위치 바이어스: 쿼리–키 어텐션 점수 자체에 선형 바이어스를 주는 방식을 사용
image.png
GLM (General Language Model)
ICLR 2023, 칭화대
BERT(마스킹), GPT(다음 토큰 제시), T5(인코더, 디코더 모두)의 장점을 통합. 문장 내부 임의 구간을 빈간으로 두고 순서 없이 예측하도록 학습. NLU, 조건부, 무조건 생성 모두에서 모델 1개로 고성능 추구
핵심 기술 요소
빈 간 채우기 & 2D 위치 인코딩
임의 길이 스팬을 한꺼번에 예측. 장거리 의존성을 학습
2D 포지셔널 인코딩으로 입력, 출력 위치를 분리해서 장문의 정확도를 높임
양방향 + 자동회귀
BERT처럼 양방향 인코딩으로 문맥 이해
GPT처럼 자동회귀 디코딩으로 생성
한 모델이 분류, 추론, 생성까지 처리
대규모 안정 학습
GLM-130B는 스파이크 로스 완화, 미세 혼합 정밀도, 데이터 커럼프션 탐지와 같은 엔지니어링 노하우 공유
Orca 
2023, MS
LLaMA 13B 기반 소형 LLM. GPT-4를 단계적으로 모방 학습해서 사고력 향상
단계적 학습
Teacher-Assistant 학습
1. ChatGPT 3.5 turbo가 확정한 FLAN-5M으로 기초 능력 확보
2. GPT-4가 생성한 FLAN-1M 설명 추론으로 고급 사고력 주입
Explanation Tuning
단계별 사고 과정, 근거, 단계적 계획 등을 함께 학습
StarCoder
2023, Hugging Face × ServiceNow
15.5B 모델 오픈. 코딩 전용 GPT
8k 토큰 입력, MQA(Multi-Query Attention)기반 고속 추론, 코드 중간 삽입
MQA(Multi-Query Attention)
모든 헤드가 Q만 다르고 K, V는 공유. 메모리 사용과 지연 감소.
배치 추론 성능 11배 향상, 대기 시간 30% 절감
8k토큰: GPT3 대비 2배
인필링 형태로 코드 중간을 채워 넣도록 학습. 자동 완성, 리팩터링에 강함
KOSMOS
2023, MS
언어, 이미지 처리하는 멀티모달 LLM: 이미지 <-> 텍스트, 이미지에 텍스트 매칭 박스 좌표 도출, 텍스트-이미지 연계 이해와 추론
스크린샷 2025-05-04 231215.png
image.png
Gemini
2023, Google DeepMind
'Ultra-Pro-Nano' 3종을 시작으로 멀티모달 LLM 패밀리
스크린샷 2025-05-04 232428.png
텍스트, 코드, 이미지, 오디오, 영상을 동시에 학습해서 데이터간 정보 융합이 자연스러움.
트랜스포머 + MoE
1.5 부터 수백 개의 전문가 탑재
Ultra : GPT-4 보다 성능 우수
MMMU 59.4% - 복합 멀티모달 추론 최고 기록
스크린샷 2025-05-04 232903.png
image.png
멀티모달 & 효율적 AI (2023~2024)
이 시기부터는 LLM이 멀티모달 모델로 확장되었으며, 모델 경량화 연구가 활발히 진행되었습니다.
경량화
온 디바이스 & 네트워크 없는 상황에서도 QA, 번역, 코딩 도움 가능
비용 절감
커스텀 fine-tuning 가능 - LoRA 4bit -> 10만 문장으로 2시간 내 Fine-tuning 완료
엣지 AI - 스마트폰에서 7B 미만 모델 AI 적용
CLIP (2021, OpenAI) - 이미지-텍스트 연관성을 학습하는 멀티모달 모델
이미지와 텍스트를 매칭하는 방법 제시
Transformers로 텍스트 인코딩, ResNet이나 Visual Transformer로 이미지 인코딩 후, 대조학습으로 코사인 유사도로 올바른 이미지와 텍스트를 매칭함.
image.png
ClipCap(2021)
이미지 캡셔닝. CLIP으로 임베딩 뽑고 GPT2로 문장을 생성함
image.png
DALL·E
학습 1단계
이산 VAE를 학습하여 256 x 256 입력 이미지를 32 x 32 이미지 토큰을 만든다. 이 32 x 32=1024 토큰은 8192 voc 사전 크기를 가진다. 이렇게 입력 이미지를 192배 압축하면 흐릿하지만 어떤 것인지 알아 볼 수 있을 정도의 정보는 갖고 있다. 아래는 원본 이미지와 32 x 32 이미지 토큰으로 압축 했다가 복원한 이미지.
image.png
학습 2단계
캡션을 BPE 인코딩(Byte Pair Encoding, 서브워드 단위 토큰화)한 토큰과 이미지 토큰을 concat해서 Transformer에 입력. 텍스트와 이미지 토큰의 결합 확률 분포를 학습함.
image.png
생성 단계
image.png
DALL·E2 / UnCLIP (2022, OpenAI)
이미지 생성 모델
Prior에서 텍스트 임베딩으로 매칭되는 이미지 임베딩으로 매핑한다. 디코더에서 이 이미지 임베딩을 디퓨전 방식으로 이미지를 생성
image.png
Prior 부분: CLIP의 텍스트 임베딩을 Diffusion으로 이미지 임베딩을 생성함
Auto-Regressive와 Diffusion 두 가지 방법을 실험 후 Diffusion Prior를 채택함
Auto-Regressive Prior
이미지 CLIP 임베딩은 1024차원(FP32 1024 차원)을 PCA로 319차원으로 축소한다.
CLIP 텍스트 임베딩을 입력받고 Auto-Regressive로 이미지 임베딩 319차원을 한 차원씩 순차적으로 예측을 해서 이미지 임베딩 319차원을 완성한다. 이 이미지 임베딩 319차원을 역 PCA로 다시 1024차원으로 늘려서 완성한다.
image.png
Diffusion Prior
학습
텍트스 임베딩과 이미지 임베딩을 concat한후 이미지 임베딩에만 노이즈를 추가했다가 제거하는 방법으로 diffusion 학습
생성
텍스트 임베딩에다가 랜덤 노이즈를 concat한 후 이미지 임베딩의 노이즈를 제거해서 이미지 임베딩을 생성한다.
image.png
image.png
image.png
디코더: 텍스트 임베딩과 이미지 임베딩을 Diffusion으로 이미지를 생성한 후 업스케일링함
이미지 임베딩을 입력 받아서 U-Net으로 구현한 DDIM으로 이미지를 생성한다.
이 때 텍스트 임베딩을 U-Net에 추가로 입력 되어서 Cross-attention으로 사용된다.
이미지 생성 때 텍스트 임베딩의 적용 강도를 CFG로 조정한다.
image.png
Unet 구조로 입력 이미지의 노이즈 제거 수행하여 이미지 출력
image.png
생성한 64 x 64 이미지를 super resolution diffusion model로 1024 x 1024로 확대함
image.png
CoCa (2022)
기존 문제점
CLIP은 이미지와 텍스트를 임베딩공간에서 정렬하는데 특화. 범용 멀티모달 작업(검색, 분류)는 가능하지만 이미지 이해기반 텍스트 생성 어려움
이미지 캡션 모델(BLIP)은 cross-entropy loss로 문장 생성 학습했음. 텍스트 생성은 잘 하지만 Contrastive learning이 없어서 범용 멀티모달 작업(이미지와 텍스트 매칭 기반 검색, 분류. QA) 성능 부족함.
contrastive와 captioning을 별도 모델로 학습 하거나 복잡한 학습 구조가 필요했음
CoCa
contrastive와 captioning을 하나의 transformer에서 동시 학습하여 검색과 생성 한번에 가능
비전 인코더, 텍스트 디코더 구조로 멀티 모달 학습, 처리
image.png
Flamingo 모델(2022)
DeeMind
이미지와 텍스트를 함께 입력. 둘 다 인식해서 결과 출력
이미지를 고정 길이의 토큰 시퀀스로 변환하는 attention 모듈 적용(인식 리샘플러)
image.png
GPT-4 (2023, OpenAI) - 텍스트+이미지 처리 가능
이미지와 텍스트 입력 -> 텍스트 출력
모의 변호사 시험 같은 전문적, 학업적 벤치마크에서 인간 수준의 성능
학습: 대규모 코퍼스 사전 학습후 RLHF로 파인튜닝
LLaMA (2023, Meta AI) - 오픈소스 초거대 언어 모델. 학계를 대상으로 오픈 소스로 공개하면서 알파카, 비쿠냐 등 수 많은 파생형 모델들의 탄생에 기여
LLaMA
Meta AI 발표
7B, 13B, 33B, 65B 모델. 1.4조 토큰의 공개 데이터로 학습.
13B가 GPT-3 175B 보다 우수. 65B는 SOTA인 Chinchilla-70B, PaLM-540B와 유사 성능
모델 규모에서 데이터 규모로 패러다임 전환 : 대규모 데이터 학습한 소형 모델이 대형 모델 이김
개인용 LLM 시대 오픈: 7B 모델은 VRAM 10GB RAM에서도 동작
LLM 모델 오픈 붐 가속화
GPT-류 디코더 전용 Transformer. 2048토큰 입력
LLaMA 2
Meta AI, 2023년 7월
모델: 7B, 13B, 70B
토큰 길이: 4096
학계뿐만 아니라 기업 등 상용으로도 공개
학습
사전 학습 데이터 2조 토큰, 개인정보 필터링
RLFH
Supervised Fine Tuing(SFT)
-> 보상 모델(Reward Model, RM) 학습
프롬프트 - 응답 쌍에 대해 사람의 좋음, 싫음을 라벨링한 데이터를 학습
사람 대신 결과 평가용 모델로 사용
-> Rejection Sampling
각 프롬프트에 대해 답안을 k개(4~64개) 생성함
-> 보상 모델로 평가해서 상위 r%만 남김
-> 통과한 데이터로 추가 지도 학습
-> PPO(Proximal Policy Optimization)
Rejection Sampling으로 추가 학습 때 원본 학습 스타일과 너무 멀어지지 않도록 그레디언트 조정함
그레디언트 값 = RM 점수 - 스타일 차이 점수(0.005 ~ 0.1)
image.png
라이선스: 제한적 상업적 이용. 경쟁사 서비스와 통합 금지
LLaMA 3
2024.4
더 크게·더 길게·더 안전하게
모델: 8B, 70B, 405B
토큰 길이: 128K
학습
15.6조 개 토큰 + 코드 + 수리 + 다국어
8+30 국어 지원
Direct Preference Optimization(DPO)를 6라운드 반복해서 PPO 없이도 인간선호에 맞춤
405B는 GPT-4o와 유사 수준
라이선스: 제한적 상업적 이용
LLaMA 4
2025.4
네이티브 멀티모달과 Mixture of Experts(MoE) 설계를 모 도입한 LLM
109B - 16 Experts 10M 토큰 입력. 40 T 토큰으로 학습
400B - 128 Experts 1M 토큰 입력. 22 T 토큰으로 학습
MoE
다수의 전문가 FFN을 배치하고 게이팅 네트워크가 토큰당 상위1~2 전문가만 활성화. 400B 모델에서도 17B 만활성 연산.
image.png
2025년 최신 동향 (2024~2025)
Phi3(2024, MS)
긴 문맥, 멀티모달
Phi3-mini
3.8B
4K/128K 입력
휴대폰에서 동작. GPT-3.5 성능
장문 요약, QA
Phi3-Small
7B
128K
노트북 CPU 동작
Phi3-Medium
14B
4K/128K
Mixtral 8X7B 수준, 저렴한 학습 비용. INT4 8GB. GPU 없어도 동작
Phi3-Vision
4.2B
4K
이미지+텍스트 멀티모달
Phi3.5(2025, MS)
3.8B
128K
Gemma2 8B 보다 우
Gemini 1.5 (2024, Google DeepMind) - 학습 속도 및 확장성 증가
Claude 3 (2024, Anthropic) - AI 윤리성과 안전성을 강화
LLama-3 (2025, Meta AI) - 경량 AI 모델 연구 지속
Qwen 2 (2025 예상, Alibaba Cloud) - 기업 및 연구 목적의 강화된 AI 모델
Deepseek r1
RL(Reinforcement Learning)과 GRPO(Group Relative Policy Optimization), CoT(Chain of thought), 다단계 학습 파이프라인(Multi-Stage Training Pipeline)이 특징
DeepSeek의 주요 모델인 V2, V3, 그리고 R1의 차이점과 특징을 정리
DeepSeek V2
초기 버전으로, DeepSeek-Coder와 후속 V2 시리즈를 통해 기본적인 언어 처리와 코딩 자동완성 등 실용적인 기능을 제공하였습니다.
Llama와 유사한 dense transformer 구조를 기반으로 하며, 이후 V2.5를 거치면서 점진적인 개선이 이루어졌습니다.
DeepSeek V3
V2의 개선판으로, 6710억 개의 파라미터와 Mixture-of-Experts (MoE) 및 Multi-head Latent Attention (MLA) 같은 혁신적 기법을 도입하여 성능과 효율성을 크게 향상시켰습니다.
Multi-head Latent Attention (MLA)
이미지 임베딩을 latent space로 압축해서 latent query 토큰으로 사용함. 메모리와 연산량 줄임
14.8조 토큰의 다국어(pre-training) 데이터를 사용하며, FP8 학습 기법과 긴 문맥(최대 128K 토큰) 지원 등으로 전반적인 언어 이해 및 생성 능력이 강화되었습니다.
주로 일반 채팅 및 자연어 이해, 생성에 최적화되어 있으며, API 비용 측면에서도 V2보다 효율적입니다(예: 입력 토큰당 가격이 V3는 R1보다 약 6.5배 저렴함
DeepSeek R1
V3의 기본 아키텍처 위에 순수 강화학습(RL)을 추가해, 특히 수학, 코딩, 논리와 같이 고도의 추론이 필요한 작업에 최적화된 모델입니다.
GRPO(Group Relative Policy Optimization) 등 강화학습 기법을 통해 모델 스스로 '생각하는' 체인-오브-쏘트(Chain-of-Thought) 과정을 학습하도록 설계되어 있습니다.
결과적으로 일반 대화에서는 V3와 유사한 성능을 내면서, 복잡한 추론 문제에서는 OpenAI의 o1 수준의 성능에 도달하거나 이를 능가하는 것으로 평가됩니다.
노하우
텍스트 생성(Decoder only Transformer)에서의 최적화
image.png
image.png
프롬프트
최적화 1: Closed Question
질문을 잘 설계하면 closed question으로 설계할 수 있다.
image.png
Closed question이면 토큰도 적고, 시간도 훨씬 빠르다.
image.png
입력
image.png
최적화 2: 토큰화
토큰화
Subsord-based로 토큰화함. 단어를 의미 있는 더 작은 단위로 자름. 확률적으로 주로 같이 붙어 있는 글자단위로 토큰화.
charater-based는 너무 많은 토큰을 사용. 연산이 많고 복잡해짐.
whitespace는 사전에 없는 단어나기호는 처리불가
image.png
토큰 임베딩
토큰을 임베딩화
image.png
토큰 임베딩에 위치 정보를 추가해서 트랜스포머 블록으로 넘김
image.png
토큰화 최적
최적화해서 토큰 수만 줄여도 속도와 성능 더 향상됨
image.png
위 토큰나이저로 소요 시간 차이
image.png
출력
최종 hidden state를 토큰화해서 출력함
image.png
최종 hidden state는 현재까지의 입력 토큰들의 바로 다음에 나올만한 라면, 수육 등과 유사한 hidden state가 나옴
image.png
이 hidden state로 토큰 사전의 모든 토큰에 대해서 -무한대 ~ +무한대 범위인 Logits값으로 관련도를 출력하고, 이것을 normalize해서 확률값으로 출력한다.
image.png
이 때, 입력 프롬프트에서 특정 형태로 출력을 요구한 경우 해당 출력 값이 Logits에 반드시 포함된다. 그리고 나머지 항목들은 -무한대로 설정되어 고려 대상에서 모두 제외된다. (이제 요구한 항목 외에는 연산에서 배제된다)
image.png
최적화 3: Structured Output
Json은 대표적 데이터 직렬화 형식임. LLM을 JSON으로 출력하는 경우 많음
image.png
LLM을 JSON으로 출력하는 방법: 프롬프트에 JSON으로 출력해달라고 함
중괄호, 따옴표 같은 포멧 자체를 표현하는데에도 LLM을 사용함
image.png
아래와 같이 프롬프트를 구조화 하면 LLM은 포멧이 아닌 값 출력에만 사용된다. 그래서 그 만큼 빨라진다.
image.png
이렇게 구조화 하면 아래 처럼 토큰 사용이 줄고 그만큼 속도 빨라진다. 왼쪽 JSON 출력을 위해 sturctured 아웃풋 사용 여부에 따라 3~4배 빨라짐.
image.png
Structured Output을 사용하는 방법
오픈 모델: 출력 부분을 직접 수정해서 structured output 으로 출력 가능
Outlines라는 라이브러리 사용
Closed 모델인 OpenAI, Gemini는 API request에 출력 포멧을 같이 전송하는 방식으로 structured output 사용 가능
LLM 내부
image.png
입력 값을 트랜스포머 블록을 거치면서 문맥적 의미를 담은 임베딩으로 변환된다.
image.png
입력된 임베딩으로부터 Key, Query, Value를 구함. Key 행렬, Query 행렬, Value 행렬을 학습으로 만듦
image.png
Value: 입력 text를 임베딩으로 변환한 값
Key: 입력 텍스트의 인덱스(Value는 입력 텍스트의 의미를 타나낸 것이고, Key는 입력값 순서를 나타냄)
Key, Query: Value에 대한 가중치를 계산한 벡터. ex) Q_2*K_1 는 사과가 별모양과 얼마나 관련이 있는지에 대한 가중치임
image.png
최적화 4: KV 캐쉬
어텐션 계산을 할 때 K, V 연산을 반복한다. 동일한 연산은 캐쉬해놓은 값을 가져다 쓴다.
원래는 아래와 같이 계속 연산을 해야한다. 그리고 매번 모든 E를 Feed-Forward 에넘기기 때문에 연산량이 많다.
image.png
image.png
KV 캐쉬를 사용하면 E_i 계산 때 E_0 부터 E_i-1까지를 매번 새로 계산 하지 않고 캐쉬의 값을 가져다 쓴다.
image.png
그리고 feed-forward에도 맨 마지막 임베딩만 넘기므로 연산량이 줄어든다.
image.png
KV 캐쉬를 쓰면 아래와 같이 시간이 줄어든다. KV캐쉬는 기본 최적화임.
image.png
최적화 5: KV 캐쉬 병렬 처리
KV 캐쉬를 쓰면 속도는 빨라지지만 GPU 메모리를 너무 많이 사용함. KV캐쉬가 메모리 점유를 줄이면 전체 throghput 향상됨
메모리 비효율적 사용: KV 케쉬를 메모리에 썼다 지웠다를 반복 하다보면 메모리 파편화로 인해 애매함 크기의 자잘한 빈 공간이 흩어져 있게 된다.
image.png
KV 캐쉬 효율화: vLLM에서는 여러 메모리 블록에 흩뿌려서 저장한다. 그래서 아무 메모리 블록에나 아무리 작은 빈 공간이라도 다 사용할 수 있다.
image.png
이렇게 하면 최대 처리량과 배치 사이즈가 커진다. 못 쓰던 공간까지 다 쓰니까.
image.png
최적화 6: 병렬 처리 2
Prompt processing 단계
모든 연산을 한 꺼번에 처리하는 것이 효율적
Token Generation 단계
토큰을 순차적으로 처리함
최적화7: prefix 공유
프롬프트의 앞 부분이 매번 동일한 경우 해당 부분은 KV 캐쉬할 수 있다.
image.png
lib로 prefix를 자동으로 감지해서 KV 캐쉬할 수 있다.
image.png
비용과 지연 시간 감소
image.png
Kanana LLM 개발기
목표
한국어 · 영어 모두에서 경쟁력 있는 대규모 언어모델(LLM)을 “가능한 적은 비용으로” 처음부터 끝까지 만들어 보는 것.
성능
llama-3.1과 비교해서 한국어, 수학, 코딩에서 더 우수
Pre-training
two-stage pretraining 수행
stage1
diversity, quantity에 집중
stage2
quality, goal에 집중
데이터 수집
5T 토큰 사용
라이센스 가능한 것만 모아서 Goal 별로 분류
image.png
데이터 필터링
URL 필터링 -> 텍스트 추출 -> 언어, 음란물 필터링 -> 휴리스틱 필터링(사람 꺼 아닌 거 제거) -> minhash depulication(중복 제거) -> PII removal(개인식별 가능 정보 제거)
휴리스틱 필터링(사람이 쓴 자연어가 아닌 것은 필터링)
텍스트 통계로 품질점수를 매기고 임계 값보다 낮은 것은 삭제
문서 길이 > 10 단어
알파벳/전체 > 70%
mean word length(문서에 있는 모든 단어의 평균 길이) 3~10
stop-word 비율 > 2%
특수기호 < 10%
중복률(5 gram) > 20% 이면 제거
minhash depulication(중복 베거)
jaccard 유사도 > 0.85인 문서 군은 하나만 남김
영어 학습 데이터
데이터는 데이터 별 education score(LLM 학습 효과 점수) 상위 10%인 것을 사용
education score 측정하는 CPU 기반 모델을학습함
데이터 셋에서 적당한 것 선별 -> chatGPT로 적합/부적합 데이터 제작 -> 모델 학습 -> 상위 10%만 LLM 학습에 사용
education score 높은 데이터만으로 학습한 LLM이 평가 점수가 더 높음
image.png
코딩 학습 데이터
stage 1
오픈소스 코드 말뭉치인 starcoderdata, TheStackV2
stage 2
stage 1 데이터 중 python 관련 데이터와 SFT 데이터 셋을 추가해서 학습
TheStackV2에서 MIT 라이센스만 사용(424B -> 133B로 줄어듦)
위키피디아 학습 데이터
stage 1: 29개 언어(한국어, 영어 포함) 데이터로 학습
stage 2: 한국어, 영어 데이터로 학습
수식은 학습이 되지 않아서 수식 부분은 별도 제작해서 데이터에 추가
image.png
이렇게 수집한 5T 데이터 중 stage 1에서는 2.7T로 학습, stage 2에서는 0.3T로 학습. stage 1에서는 자연어 데이터가 많고, stage 2에서는 비슷한 비중으로 학습
image.png
LLM 학습
two stage로 Kanana Essence(9.8B) 학습 후 Pruning & distillation으로 Kanana Nano(2.1B) 학습
image.png
Kanana Essence 학습
llama 구조, DeepSeek 방법론으로 학습(scaling law, multi-step learning rate schduler 등)
image.png
학습 전략
goal 별로 어떤 데이터를 얼만큼 학습 해야 어떤 테스트 셋에서 성능이 잘 나오는지를 250B token 데이터로 ablation해가며 분석
한국어 데이터셋인 KMMLU, 한국문화 데이터 셋인 HAERAE, 영어 데이터 셋인 MMLU에서 점수가 높게 나오는 것을 목표로 잡음
stage 1
ablation 0: baseline - 전체 데이터 셋 분포 유지
ablation 1: 일반 한국어 데이터를 50%만 사용
ablation 2: 일반 한국어 데이터를 2배 학습(2 epoch)
ablation 3: STEM 영어 데이터를 2배 학습(2 epoch)
일반 한국어 데이터를 50%만 사용(ablation 1)하거나 STEM 영어 데이터를 2배 학습(ablation 3)한 것이 성능 좋음. 그리고 영어 데이터 2배 학습하면 한국 문화(HAERAE)도 대답 잘했음.
image.png
그래서 '일반 한국어 데이터를 50%만 사용', '영어 데이터 2배 학습' 모두 반영했고 영어 데이터를 추가 정제 했음.
이 데이터 분포와 학습 방법론으로 stage 1 pre-training했음
한국어 관련해서는 성능이 높았으나 수학, 코딩 성능은 낮음
image.png
stage 2
stage 2 pre-training을 잘 하기 위해 17개의 ablation을 수행했고 ablabtion 12가 llama보다 성능 높고 가장 성능 좋아서 이 방법으로 stage 2 pre-training을 함
image.png
stage 2 성능 개선 비법
데이터 추가 정제 하는 것만으로도 성능 향상됨(stage 1의 데이터 셋 비율대로 데이터 샘플링한 후)
goal 별로 학습 데이터 분포를 최적화 해야함
STEM 데이터 비율을 늘리면 한국어 일반 성능도 올라감(KMMLU)
다른 LLM 에 비해 고품질 데이터라 learning rate를 크게하는 것이 좋음
코딩, 수학에 instruction data를 추가하면 수학 성능 좋아짐
그리고 SFT(supervised Fine-Tuning) 데이터 추가 하면 더 좋아짐
stage 3
stage 2 방법 그대로 데이터만 6B로 늘려서 추가 학습
annealing(learning rate를 처음엔 크게 갈수록 줄여감)으로 학습
학습한 checkpoint를 평균해서 최종 모델 도출
image.png
pretraining 총평
two-stgage, ablation, 추가 최적화로 llama-3.1-8B 대비 20%의 데이터 만으로 pre-training에서 더 좋은 성능확보
image.png
Kasana Nano 학습
Kasna Essence와 동일한 방으로 scratch 학습해도 llama-3.2-3B보다 성능 좋음
Kasna Essence를 Stage 2 데이터(0.3T)로 pruning & distillation했더니 scratch 모델 보다 성능 더 좋
image.png
image.png
image.png
Future Work
라이센스 데이터 삭제로 인해 부족한 영역은 성능 낮음
수치 연산은 별도 제작 했는데 부족해서 성능 낮음
이와 관련해서 DeepSeek 방법을 참고해 추가 웹 크롤링과 정제, 증대등으로 데이터 추가 확보 진행
image.png
image.png
Post-training
Post-training: 사람의 요구를 잘 알아듣고 그에 맞는 결과를 출력하도록 학습하는 것
post-training하는 방법
Supervised Fine-tuing
입력 프롬프트에 맞는응답을 생성하도록 학습
image.png
Preference based learning
입력 프롬프트에 대해서 여러 결과를 생성한 후 좋은 결과는 강화하고 안 좋은 결과는 약화하도록 학습
입력 프롬프트에 대해서 여러 결과를 생성한 후 좋은 결과는 강화하고 안 좋은 결과는 약화하도록 학습
최종 결과
한국어 가장 우수, 다른 goal도 우수
image.png
학습 방법
Supervised Fine-Tuning
사람이 만든 학습을 위한 데이터는 단순하고 부자연스러운 어투이다.
image.png
실제 모델과 소통하듯 만든 데이터여야 성능이 잘 나온다.
그래서 자체 구축했다.
image.png
그리고 좋은 품질의 답변을 학습해야 생성 결과도 잘 나온다.
각 goal별로 해당 데이터 셋이 있어야 함. 다른 goal의 데이터 셋은 영향이 없다. 직접 해당 데이터를 제작, 정제했다.
Preference Learning
goal 별로 좋은 데이터를 잘 만드는 방법이 다르다.
수학은 자세한 답변 보다 정확한 답변이 더 중요하다.
off-line 학습: 여러 답변 중 좋고 나쁜 라벨을 보고 학습
on-line 학습: 데이터에 답안 없고 프롬프트만 있음. LLM의 답변을 제3의 모델이 평가를 해서 좋다, 나쁘다 평가를 하고 이 응답으로 학습을 함.
image.png
on-line 학습이 계속 학습 가능해서 더 성능 좋음
Post-training에서 중요한 점
실제 서비스와 유사한 어투와 멀티 턴 데이터가 성능에 매우 중요. 상용화된 모델은 이런 데이터를 상시 얻을 수 있어서 더 유리함
image.png
자연스러운 멀티턴 합성 데이터를 만들어서 코딩, 수학 goal에 반영 진행 중
Supervised Fine-Tuning -> Preference Leaning 까지 학습 하고 나서 On-line으로 (self로) prefernce Learning으로 스스로 정/오답을 만들어서 학습 진행
Online(Self-play) prefernece learning 관련 진행 연구
안정적인 학습 모델 연구
process supervision 연구: 정답을 맞추기 위한 추론 단계가 적절한지에 대한 학습 방법 연구
LLM 최적화(빠르고 비용 효율적으로 LLM 서빙하기 / if(kakaoAI)2024)
LLM 추론 최적화 기술
LLM 추론 최적화 기술
Inflight batching
Continuous batching
KV caching
Prefix caching
attention - paged attention, flash
Attention
Kernel fusion
Tensor parallel
Pruning / Distillation
Quantization
Speculative Decoding
image.png
양자화
inference 때에 단위 크기를 줄여서 메모리 로딩 부하를 줄여서 속도 향상(소요 시간 중 메모리 로딩 시간의 비중이 매우 큼). 모델 자체(Weight)를 양자화 할 수도 있고, activation(convolution 후 ReLU나 sigmoid같은 activation function의 결과값)도 양자화 할 수 있다.
FP32 분포의 Min, Max값을 INT8의 0, 255가 되도록 맞추면 FP32의 대부분의 값을 INT8로도 표현 가능
양자화 종류
Dynamic Quantization(동적 양자화)
Weight는 미리 양자화하고 activation은 실행 시점에 양자화
장점
CPU에서 속도 향상
연산량 많을 때 효과적
적용 쉬움: 데이터 수집, 범위 측정같은 calibration 없이 바로 적용가능
단점
양자화 오차로 정밀도 손실
연산 오버헤드 발생
Static Quantization(정적 양자화)
모델의 레이어 별 분포(min, max)를 미리 분석해서 양자화 파라미터(스케일, 제로 포인트)를 도출하여
Weight와 activation모두 미리 양자화 해놓음
장점
추론 속도 빠름
정밀도(accuracy) 높음
단점
사전 분석, 양자화 단계 필요
실시간 데이터의 분포가 달라지는 경우 오차 발생 가능
양자화 단계
1. model fusion
layer 들을 하나로 묶어줌. con-BatchNorm-ReLU를 Fusion
2. Formula Definition
Quantization 시 사용하는 식 정의
Quantization: FP32 - > Int8
Dequaltization: Int8 -> FP32
3. Hardware Deployment
인텔: FP32 -> int8 변환 위해 FP32 데이터 히스토그램 분포 분석
ARM: FP32 -> int8 변환 위해 Min, Max 값 도출
4. Dataset Calibration
스케일링 수식의 변수 값 정의
5. Weight Conversion
스케일링 수식으로 Weight를 FP에서 INT로 변환
6. Dequantization
inference 결과물을 다시 FP xkdlqdmfh qusrud
activation quntization까지 하면 속도 향상 있지만 성능 감소현상이 있음
Weight only Quantization VS 와 Activation 모두 Quantization Process
Weight only Quantization
가중치 텐서만 Int4, int3으로 저장. 연산 때는 int weight X FP activation 으로 계산해서 하드웨어 벡터화를 유지
Weight를 quantization했기 때문에 로딩 속도 빠름(gloabal memory(GRAM)->shared memoty -> registers). dequantization 에 드는 시간 보다 시간 절약.
GPTQ(Generative Pre-trained Transformer quantization)) (Weight 4bit, Activation 16 bit)
LLM을 3~4bit 수준으로 한 번에 압축. 175B 규모 GPT 모델을 A100 40GB 1개에 올릴 수 있게 양자화
캘리브레이션 샘플 보통 128~512개 문장. 최대 1024개 미만.
각 층의 가중치를 순차적으로 3~4bit INT로 변환하면서 오차를 다음 층의 가중치에 반영해서 오차를 보정해감. 양자화 후에도 정확도 손실 없음
image.png
image.png
AWQ(Activation-aware Weight Quantization) (Weight 4bit, Activation 16 bit)
가중치의 중요도가 다르다는 사실을 반영해서 중요도 상위 1%는 기존 유지하고 나머지는 3~4bit로 양자화
활성 채널의 중요도를 파악해서 1%를 선별. activation에서 진폭이 크면 양화 하기 여럽다. activation에서 진폭이 큰 부분의 크기를 줄인다음 weight 양자화에 적용한다. 그러면 weight only quantization만 으로 weight, activation 둘다 양자화 연산하는 효과를 낼 수 있다.
image.png
이 때 큰 진폭을 작게 줄일 때 손실을 최소화 하는 scale 수식은 아래와 같다. 아래 식을 보면 양자화, 역양자화를 위한 W, X를 사전에 구할 수 있어서 inference 때 연산을 줄일 수 있다.
image.png
통계 값만으로 Weight를 양자화
QQQ(Quality Quattuor-bit Quantization) (Weight 4bit, Activation 8bit)
AWQ한 후 GPTQ 적용
AWQ 방법으로 weight 진폭을 스무딩 한 다음, GPTQ 방법데로 weight 각 층을 순서데로 int로 변환하면서 오차를 다음 층에 반영하는 방법으로 양자화 함.
Weight 4bit(INT4)에 Activation 8bit(INT8) 로 해서 모델 정확도를 유지하면서도 추론 속도를 2.24배 높인 PTQ 방식
image.png
QQQ 적합한 때
실시간성이 중요한 LLM 추론(챗봇, RAG 서버) 때
온프레미스 GPU팜(클라우드 대비 prefill(KV 캐쉬 값 뽑는 구간) 에서 병목이던 현상을 줄임
Weight-only INT4 가 느릴 때 시도
QAT(Quantization Aware Training)
양자화-비양자화 과정 중에 weight와 activation의 손실을 파악하여 학습 중에 보정이 되도록 함
QAT 단계
1. 프리 트레이닝된 모델 확보(FP32로 학습)
2. 모델에 fake quantization 레이어 삽입
3. 추가 학습
fake quantization이 양자화 손실이 없어지도록 가중치 재조정함
양자화-비양자화 모듈로 정수 반올림 과정을 시뮬레이션함
역전파(backpropagation) 시 양자화로 인한 오차를 모델 가중치에 반영
양자화 파라미터(스케일, 제로 포인트) 도 반영
4. 추론 모델 저장
양자화된 모델을 저장
양자화 별 성능 비교(Kanana Seesnse Instruct )
GPTQ, AWQ, QQQ모두 성능 하락 발생. 원래 Weight 16bit, Activation 16bit 인 것을 Weight 8bit, Activation 8bit 로 줄이는 양자화로 결정
image.png
속도에 대해서는 모델이 클수록, GPU 메모리가 작을 수록 양자화 효과가 크다
A100 80G
image.png
(latency는 작을 수록 좋음. Throughtput은 몇 배 성능 향상이므로 높을 수록 좋음)
H100
image.png
speculative decoding(스펙큘러티브(위험감수) 디코딩)
추론 속도 지연 줄임
LLM에서 토큰을 하나씩 생성하기 때문에 길어질 수록 속도가 느리다. 작은 draft 모델이 K 개의 후보 토큰을 한꺼번에 생성한 후 검증을 통해 수락/거절 판단함. 불일치가 나오면 그 이후 토큰은 버리고 거기서 부터 다시 반복함
image.png
image.png
후보로 생성한 토큰의 채택률이 높아야 추론을 많이 건너뛸 수 있다.
이렇게 하기 위해서
draft 모델이 target 모델과 유사한 출력 확률 분포를 가져야 한다.
draft 모델의 출력 길이(K)를 적절하게 선택해야 한다.
draft 모델이 가벼워야 속도 향상 효과가 있다. 그래서 draft 모델은 작아야한다.
darft 모델이 바로 다음에 나올 토큰 몇 개만 잘 예측하면 되기 때문에 성능이 높지 않아도 된다.
아래 모델 크기와 성능 비교. 아래 표 정도면 됨. 아래 그래프 보면 350M 보다 125M이 채택율이 더 높게 나왔음.
image.png
image.png
draft 모델이 원 모델의 1/10 정도 크기. 1/50정도까지 줄이려고 pruning & distillation 하는 중.
sLM Fine Tuning
image.png
SFT
image.png
NLP
NLP 개요
NLP 작업
image.png
분석 작업
Semantic Task(의미 분석)
개체명 인식(NER, Named Entity Recognition)
'스티븐 잡스'라는 스펠링을 읽으면, 사람 이름이라는 것을 인지 함
개체명 인식 테깅 방법
BIO tagging(IOB tagging)
B: 개체명 시작
I: 개체명 중간
O: 개체명 아님
image.png
영화, 극장에 대한 개체명 테깅 예
image.png
Text Classification
글을 보고 분류
ex) 이메일 - 스팹 O/X, 리뷰가 긍정적/부정적, 기고문의 분야가 경제/문화/정치/과학/...
Syntactic Parsing(문법적 분석)
POS (Part Of Speech) Tagging
입력 단어 별로 문법적 정보를 테깅함(주어, 목적어, 동사 등등)
생성 작업
QA(Question Answering): 챗봇
Language Generation: 글 생성 (질문이 없더라도 신규 글 작성, 글을 이어서 완성)
번역
자연어 처리
어휘 분석(형태소, 단어) -> 구문 분석(문장) -> 의미 분석(문맥) -> 대화 분석(대)
자연어 처리의 단계
음성 -> 텍스트로 변환 -> 언어 이해(의도, 추가 정보 도출) -> 대화 관리(대답/질문 방향 결정, 관련 정보 검색) -> 대답 생성(언어 종류, 성별에 맞춰서 텍스트로 표현)
언어 이해(Language Understanding)에서 Intent는 화자의 의도, Slot Filling은 필요한 정보 항목 템플릿에 해당 정보를 도출해서 채우는
image.png
토큰화
image.png
단어 임베딩
image.png
image.png
One-hot-vector
one-hot-encoding.
image.png
메모리를 많이 쓰고 의미를 담지 못함
n-gram
n개의 연속된 항목 단위
Unigram(1-gram): "I", "love", "NLP"
Bigram(2-gram): “I love”, “love NLP”
Trigram(3-gram): “I love NLP”
Bag Of Words
문서별 단어 사전 벡터에 단어 등장 횟수를 기입.
각 문서에 대해서 전체 어휘 개수 만큼의 차원을 갖는 벡터를 만들고, 각 차원 마다 해당 단어의 출현 빈도를 설정한다.
코퍼스:
문서1: "나는 사과를 좋아한다"
문서2: "너는 바나나를 좋아한다"
단어 집합: [나는, 사과를, 좋아한다, 너는, 바나나를]
문서1 벡터: [1, 1, 1, 0, 0]
문서2 벡터: [0, 0, 1, 1, 1]
TF-IDF (Term Frequency-Inverse Document Frequency)
해당 문서에서만 자주 등장하면 중요한 단어
TF(Term Frequency): 단어 w의 출현 횟수
DF(Document Frequency) : 단어 w가 들어간 문서의 수
IDF(Inverse Document Frequency): DF(t)에 반비례하는
TF-IDF(w,d) = 단어 w가 문서 d에 나타난 횟수 / 해당 단어가 등장한 문서의 수
TF-IDF는 해당 단어가 다른 문서에는 잘 안 나오고 특정 문서에서는 많이 나올 수록 값이 크다.
image.png
idf()는 log를 적용해서 정규분호화 해준다. 그리고 분모에 1을 더해서 분모가 0이 되지 않게 한다. n은 문서의 수.
image.png
Word2Vec (2013, Google) - 단어의 Word Embedding 학습
Bag of Words는 단어의 의미를 반영하지 못함.
Word2Vec은 단어의 의미를 반영한 임베딩 벡터를 만듦
아이디어
유사한 단어는 근처에 위치한다
단어는 여러 개의 유사도를 가질 수 있다.
CBOW(Continuous Bag Of Words)
대상 문서에서의 단어 빈도 수
주변 단어를 통해 타겟 단어를 예측 하는 신경망 모델
image.png
Skip-gram
한 단어를 기준으로 주변에 올 수 있는 단어를 출력하는 신경망 모델
image.png
Skip-gram 모델은 classificatin 모델에서 verification 모델로 변경
이전 버전: 어떤 단어를 입력하면 연관 단어를 출력하는 신경망 모델
현재 버전:
어떤 단어와 연관 후보 단어를 입력하면 유사도를 출력하는 모델
image.png
CBOW와 Skip-gram으로 단어를 학습 한 후 단어를 벡터로 표현하면 단어 벡터 간 연산 가능
king - man + woman = qween
image.png
단어간 유사도 측정, 단어간 관계 파악 가능
벡터 연산으로 추론 가능
한계
1단어 1벡터라 다의어 반영 어려움(ex. bank: 은행, 강둑)
문장 구조나 문장 전체 의미 도출에 어려움
GloVe (Global Vectors)
전체 단어와의 관련도, 다른 단어와의 상대적 관련 비율을 반영해서 임베딩
전역 빈도와 단어 의미 모두 담음
단어 빈도가 적어도 정확한 임베딩 도출 가능
Word2Vec은 주변 단어와의 의미를 담고 빈도는 모름
TF-IDF는 빈도만 반영하고 의미를 반영하지 못함
학습 방법
아래는 윈도우 1일 때(대상 단어의 바로 왼쪽, 오른쪽에 있을 경우 카운팅) 각 단어에 대한 빈도를 표로 정리
통산 윈도우는 5~10. 대칭행렬. 가로세로는 voc크기임. 대부분의 값이 0
image.png
위의 표를 이용해서 아래와 같이 등장 확률로 나타낸다.
ice라는 단어가 k에 해당하는 단어와 함께 나올 확률, steam이라는 단어가 k에 해당하는 단어와 함께 나올 확률을 구한다. 그리고 이 두 확률의 비율도 구한다.
그래서 ice와 단어 k와의 거리, steam과 단어 k와의 거리, 그리고 ice와 steam 중 어느 것이 k에 더 가까운지를 파악한다.
이렇게 각 단어의 상대적 출현 빈도와 벡터 임베딩을 모두 파악한다.
image.png
단어 간 함께 등장 확률이 높을 수록 임베딩을 유사하게 하고 확률이 낮을 수록 임베딩을 다르도록 학습함. (Word2Vec과 같은 아이디어)
GroVe도 Word2Vec과 성능은 유사함
한계점
동음이의어는 반영 못함. bank: 은행, 강
FastText (2016, Facebook)
word2vec은 문서에 안 나오거나, 잘 안나오는 단어, 오타 있는 단어는 임베딩 생성 못함
FastText에서는 단어를 n-gram으로 쪼개서 임베딩을 만들고 이 임베딩의 평균 임베딩을 사용한다.
n값에 따라 아래와 같이 모든 n길이의 셋으로 구성한다.
image.png
단어의 임베딩은 쪼갠 단어 셋과 단어 전체 임베딩의 합이다.
3-grams인 상태에서 eating의 임베딩은 <ea의 임베딩, eat의 임베딩, ati의 임베딩, tin의 임베딩, ing의 임베딩, ng>의 임베딩, eating의 임베딩을 모두 합해서 나온 임베딩이다.
image.png
그래서 학습 할 때 eating의 임베딩을 업데이트 하면 위의 임베딩 전체를 동일하게 업데이트한다.
n은 2~5와 같이 범위로 설정한다. 그러면 Orange의 임베딩은 아래의 22개 임베딩의 합이다.
image.png
Word2vec은 사전에 없는 단어면 없다고 나온다. FastText에 사전에 없는 단어가 들어와도 조합해서 임베딩을 출 력한다. 예를 들어 Oranges가 사전에 없어도 들어오면 기존 Orange와 다른 es, s의 임베딩으로 아래와 같이 임베딩을 구한다. 이렇게 Orange와 비슷한 임베딩이 출력 된다.
image.png
오타가 나서 Oranze라고 해도 아래와 같이 임베딩을 도출한다. 이렇게 Orange와 비슷한 임베딩이 출력 된다.
image.png
word2vec vs FastText
image.png
ELMO (Embeddings from Language Model)
word2vec, Glove는 동음이의어 처리 못함.
사과: 과일 vs 용서
ELMO는 문맥을 반영하여 동음이의어도 구분해서 표현 가능
ELMO는 forward, backward 두 모델로 학습하고 각각의 임베딩을 합쳐서 최종 임베딩 만듦
image.png
image.png
조금 더 자세히 설명하면 아래 그림의 1, 2, 3, 4와 같다.
image.png
image.png
UMLFit (Universal Language Model Fine-tuning for Text Classfication)
Transfer learning을 NLP에 적용
1. 3 layer Bi-LSTM 언어 모델을 pre-training
2. LM을 도메인에 맞게 fine-tuning
3. classifier를 fine-tuning
image.png
신경망에 적용
임베딩을 뽑은 후 ML 모델을 돌리면 신경망을 2번 실행하게 됨.
image.png
모델 자체에 임베딩 레이어를 포함시켜서 단순화 함
image.png
모델과 구현예
지역과 부동산 광고에 따른 적절한 가격을 예측하는 모델
image.png
아래에서 모델을 LSTM을 쓴 이유: 광고 문구 자체가 단어의 나열이라 순서 입력이기 때문.
image.png
핵심어 분석
빈도수에 따라 글자 크기 시각화: WordCloud
image.png
TF-IDF
sklearn의 TfidfVectorizer 사용
토큰 패턴 지정
(?u) : unicode로 설정
\b : 단어의 시작, 끝 표시
\w : 1글자를 표시
\b\w+\b : 1 단어 안에(단어의 시작과 끝 사이에) 1글자 이상이 들어 있음. 즉, 'I'와 같이 1자로 된 것도 단어로 인정해서 토큰화 하라. default 값은 2글자 이상만 단어로 인정.
image.png
위의 결과 후에 아래 실행. 'I like animals'의 각 단어에 대한 TF-IDF 값 출력.
'I'는 위의 vocabulary에서 index 3이니까 'I'의 TF-IDF 값은 0.37979767 임. I는 위의 documents에서 문장 마다 들어가 있어서 TF-IDF의 값이 작게 나왔음(범용적으로 흔한 단어는 낮게 나오고, 특정 사황에서 자주 나오는 단어는 높게 나옴)
'like'는 voc index가 4니까 TF-IDF값이 0.5728925임.
'animals'는 voc index가 0이니까 TF-IDF값이 0.72664149임. 한 번만 나와서 높게 나옴.
'I like animals and love animals'에서 'animals'는 2번이나 나와서 TF-IDF값이 0.90406978로 더 높게 나옴.
image.png
TF-IDF 기반 유사도 판단
영화 DB에서 제목과 요약 항목을 사용
image.png
입력 영화와 비슷한 영화를 출력하는 get_similar()를 만들어보자.
입력 값
영화 제목
indices: 영화 제목의 인덱스 리스트
cosine_sim : 영화별 TF-IDF를 뽑고 cosine similarity를 구한 결과
TF-IDF 구함: 영화 10000개 각각에 대해서 32350 단어 각각에 대한 TF-IDF 값 행렬 나옴. 10000 X 32350
TF-IDF 행렬을 영화 기준으로 내적해서 10000 X 10000 인 cosine 유사도 나옴.
image.png
image.png
함수
image.png
의미 연결망 분석(SNA, Semantic Network Analysis)
단어 관계 분석
단어와 연관된 단어로 주요 내용을 가늠할 수 있다.
image.png
의미 연결망 분석 예: 피자 댓글 분석
댓글 수집
image.png
댓글 수집해서 인접행렬 만듦
image.png
안접행렬을 그래프화
image.png
연결정도
노드 별 엣지 수
image.png
연결 중심성
어떤 노드와 연결 가능한 노드 중 직접 연결된 것의 비율
연결 중심성 = (특정 노드 i와 직접 연결된 노드 수) / (노드 i와 직/간접적으로 연결된 모든 노드 수)
'많다'와 직접 연결된 노드는 3개(치즈, 토핑, 종류)
'많다'와 직/간접적으로 연결된 모든 노드 수는 그냥 전체 노드 수임. 총 5개 노드 중 '많다' 1개 뺀 4개
'많다'의 연결 중심성 = 3/4 = 0.75
image.png
매개 중심성(다리 역할을 하는 정도)
어떤 노드가 다른 노드 연결에 얼마나 필요한가
A 단어의 매개 중심성 = (A 단어를 지나가야하는 단어 쌍의 수) / (A 단어를 지나가지 않는 단어 쌍의 수)
image.png
근접 중심성(Closeness centrality)
한 단어가 다른 단어들과 얼마나 가까이 있는지 측정
A단어의 근접 중심성 = (다른 단어 수) / (A와 다른 단어 간의 최단 거리의 총합)
image.png
Training
multi-class를 binary class로 변경하여 속도 향상
'not' 다음에 올 단어는? => 'not'다음은 'thou' 인가?
image.png
binary class로 아래와 같이 학습. 단어 간 input/output 확률 학습
image.png
번역
image.png
LSTM 얇으면 학습이 안되고, 두꺼우면 학습이 버겁다.
image.png
image.png
attention을 뽑아보자
image.png
image.png
image.png
음성 인식
TTS
image.png
기존 Concatenative TTS
음절, 음소 마다의 음성 파일을 이어 붙임
image.png
Autoregressive
t-1 정보 활용, 시간 순대로 산출
품질 높음, 속도 느림
텍스트와 소리 쌍 데이터만 필요
image.png
WaveNet (2016, DeepMind)
딥러닝 기반 오디오 생성 모델의 지평을 열음. 기존 Parametric, Concatenative TTS 대비 무척 자연스러운 음성 품질
autoregressive 모델로 음성 신호와 분포를 예측하여 파형을 생성함.
그래서 음성 뿐아니라 음악 등 모든 사운드를 모델링 가능
wavenet2.gif
16k sampling rate 기준이다. 그러면 t 시점의 값 도출을 위해서는 과거 16000개 값이 필요하다. 16,000개의 데이터 값을 사용하기에는 receptive fiend가 좁다. 그래서 나온 방법이 Dilated Causal Convolution임
Stacked Dilated Causal Convolution Layer는 아래와 같이 적은 수의 층으로 더 많은 과거 값을 이용하면서도 효율적으로 출력값 도출한다.
wavenet.gif
Residual Blcok 하나가 노드 하나이다.
image.png
Casual conv: 시간 순서 고려한 Conv layer
더 깊게 쌓을 수록 1개 출력 값에 대한 입력 값을 더 늘릴 수 있다.
즉, 더 오랜 과거 시간을 반영할 수 있다.
대신 연산량이 너무 커짐.
Dilated Conv: 추출 간격 조절
추출 간격을 조절하여 더 넓은 수용 범위를 갖게 함.
그래서 layer를 조금만 싾아도 넓은 입력 시간 범위를 커버할 수 있다.
image.png
TACOTRON
encoder, attention-based decoder, post-processing network로 구성. 글자를 입력받아 스펙트로그램 프레임을 출력하며 이 스펙트로그램이 wav로 변환
스크린샷 2025-05-06 214847.png
CBHG 인코더 (Convolution Bank + Highway network + Bidirectional GRU)
문자 임베디에서 지역 n-gram과 장기 의존 정보를 추출함. 프리-넷(dropout bottlenet)으로 과적합과 발음 오류를 억제함
스크린샷 2025-05-06 214924.png
Non-autoregressive
Text Feature로 부터 한 번에 모든 시퀀스를 추론
image.png
Transformer 발표 후 대중적인 구조가 됨
self-attention 구조의 Transformer가 non-autoregressive를 가능하게함.
훈련, 추론 속도 빠름, 속도와 음높이 조절 가능
글자 별 소리 길이 정보 추가 필요
Autoregressive 보다 성능 낮음
STT
Whisper
한국어 포함 다국어 인식, 영어로 번역 가능
Transformer의 인코더 디코더 구조 사용.
image.png
LLM 음성인식 성능 개선
기존 음성 인식 모델은 음향모델, 발음 사전, 언어모델로 구성
image.png
End-to-End 음성인식 모델 : 음성을 바로 텍스트로 출력
image.png
CTC (Connectionist Temporal Classification)
발음이 늘어지거나 묵음이 들어 있어도 인식할 수 있게함.(ex. hello: 헬로, 헤-ㄹ-로-오, 헤----ㄹ----로----오----)
image.png
이런 경우 인식 확률을 극대화 하는 RNN 구조를 찾는 쉬운 방법은 given data의 path에 대한 확률에 softmax를 적용하는 것
image.png
음성 뿐 아니라 글자도 마찬가지임. 그냥 글자와 늘어져있는 글자의 차이.
image.png
image.png
CTC의 문제 1
출력 시퀀스 길이는 입력 시퀀스 길이 보다 작아야 함. 그래서 풀링 구조를 사용하지 못함
입력 시퀀스 길이보다 크면 하나의 음성이나 글자가 중복해서 출력됨.
CTC의 문제 2
출력은 서로 독립적인 것으로 가정함. 그래서 I ate food 대신 I eight food가 나오기도 함.
AED (Attention-based Encoder-Decoder)
Attention의 장점을 유지하면서 CTC의 문제를 해결함
각 입력에 대해 여러 출력을 허용하여 CTC 문제 1을 해결
예측 네트워크와 Joint 네트워크를 추가해서 CTC 문제 2를 해결
인코더는 음성 feature를 출력함
예측 네트워크는 이전 txt의 feature를 출력함
Joint Network는 이 두 feature로 텍스트를 출력함
RNN-T (RNN-Transducer)
스트리밍 지원
LLM 음성인식 모델
기존 트랜스포머 디코더 부분을 LLM으로 대체
image.png
image.png
LLM은 모델이 커서 학습/연산 비용이 매우 큼
image.png
그래서 distillation 으로 모델 크기를 줄임. LLM 디코더를 teature로 하고 기존 transformer decoder를 student로해서 학습시킴. inference 때는 LLM Decoder 동작 안함.
image.png
LLM은 32 layer이고 Transformer는 6layer라서. LLM의 입력쪽 6레이어, 출력쪽 6레이어, 골고루 선택 6레이어를 Transformer에 이렇게 3가지로 케이스로 매핑 했음
image.png
다국어, 한국어 각각에 대해서 DB, 인코더, LLM을 최적의 것으로 사용함
image.png
Voice Conversion(음성의 화자를 변경)
음악 자곡
학습 데이터의 영향 받기 때문에 저작권 이슈 있음
품질 낮음
음질 개선
노이즈 제거, 음성 품질 개선 (기존에는 노이즈 제거 시 품질 낮아졌음)
스크린샷 2025-05-06 222059.png
복수 화자 음성에서 화자 인식
서비스
콜센터 TTS, STT
회의록 작성(노이즈 제거, STT, 화자인식)
AI 비서
스트리밍 - 가공 음성으로 유투브 스트리밍
Virtual Human
트랜드
AI 음성으로 가창
NLP(보통 txt로 NLP, 음성으로도 유사 구조로 NLP 진행)
실시간 음성 번역
image.png
Vision
Vision 모델 발전
1. 2000년대 초반 (2000~2010) – 전통적 컴퓨터 비전 기반
SIFT (Scale-Invariant Feature Transform, 2004, David Lowe)
객체 인식. 이미지의 스케일 변화 및 회전에 강함.
image.png
image.png
HOG (Histogram of Oriented Gradients, 2005, Dalal & Triggs)
보행자 감지 기술로 사용된 중요한 특징 추출 기법.
기울기 벡터로 사람 윤곽선 패턴인지 여부 판단
image.png
Viola-Jones Face Detection (2001, Paul Viola & Michael Jones)
Haar-like 특징과 AdaBoost를 활용한 얼굴 검출 방법.
2. 딥러닝의 등장과 초기 연구 (2010~2015)
CNN(1980)
CNN은 필터를 사용한다. 세로 패턴의 필터는 세로 특징이 있는 위치에 값을 출력하고 나머지는 0으로 만듦.
CNN이 NN과 다른 점
위치 정보를 잃지 않음: 필터가 인접한 픽셀을 묶어서 정보를 뽑고 위치 순서대로 나열함
이미지가 반전, 회전 되어 있어도 필터가 동작한다.(눈 찾는 필터는 상하 반전 되어도 눈을 찾는다)
여러 종류의 필터로 여러 종류의 특징을 추출함
CNN이 FC(Fully Connected) Layer도 포함한다.
100 X 100 이미지에 100 X 100 커널 사이즈 필터를 연결하면 Fully Connected 된 노드가 되고 이 필터 10개를 사용하면 10000 개 입력, 10 개 출력인 FC Layer가 된다.
CNN 학습
개요
RGB 이미지 1장(3채널)에 대해서 커널(RGB 3채널에 5X5 크기) 2개를 적용하면, 커널 1개당 1 채널 씩해서 2채널이 나온다. 여기에 2채널에 3X3 크기 커널 3개 적용하면 3채널 출력이 나온다.
image.png
채널과 사이즈 모두가 3X5X5가 하나의 값(1x1x1)이 된다.
image.png
커널 자체는 사람이 정해 놓지 않고 학습 과정에서 어떤 특징을 뽑을지 정해지면서 커널 값이 설정된다. 커널 값이 W 값이다.
image.png
연습 문제
3(RGB) X 7 X 7 입력 3 X 3 짜리 커널의 채널 수는?
3채널(앞의 채널과 동일하게 맞춰야 하므로). 출력 크기는 5X5
커널 10개를 적용했다고 하면
10X5X5가 됨
그 다음 3X3 짜리를 또 conv했을 때 커널의 채널 수는
10 채널. 출력 크기는 3X3
이런 필터 20 종류를 사용하면 출력 크기는
20X3X3
이것을 데이터 32개 대해서 한다면
32X20X3X3
Feature Map
image.png
img.gif
Strides: 필터(커널)이 몇 간 단위로 이동하나
Padding: 모서리 확장. 1이면 4x4 -> 5x5
Pooling
feature map의 크기를 줄임. Max Pooling, Average Pooling이 있음
목적: 계산량 줄이고 overfitting 예방
conv와 차이
conv는 특징 추출이 목적
pooling은 크기 축소가 목적
pooling은 채널 수 관련없음. 채널 수 유지
image.png
conv, pooling을 반복하면
더 넓은 범위에 대해서 더 다양한 특징을 뽑는다.
채널 당 크기는 작아지고(넓은 범위를 더 요약하고) 채널은 늘어난다(특징이 늘어난다)
conv할 때 커널 여러개 쓴 만큼 채널 늘어나고, pooling한 만큼 한 채널의 크기가 작아진다.
image.png
예) 녹색 채널은 잔디 있는 부분을 값을 출력하고 나머지는 0으로 채우고, 흰색 채널은 털있는 부분은 값을 출력하고 나머지는 채우고, 노란색 채널은 귀를.... 이렇게 한후 모든 채널에 대해서 종합한 값으로 출력하면 강아지로 분류된다.
image.png
크기, 연산량 계산
feature map size는?
image.png
layer i의 가중치(weights) 수
= 학습을 통해 업데이트 되는 파라미터 수
= 총 커널의 크기
= 커널의 가로 X 세로 X 이전 객체의 채널 수 X 현재 커널 개수
image.png
layer i의 메모리 양
= 학습 결과
= 커널 계산 결과인 feature map의 전체 크기
= feature map 가로 X 세로 X 채널수(feature map 개수)
layer i의 계산 복잡도(CPU의 연산량, 추론 시스템의 최소 스펙 산출 위해 필요)
= (커널 가로 X 세로 ) x (feature map의 가로 x 세로) x (이전 채널 수 x 이번 채널 수)
CNN 인사이트
적은 수의 weight로 위치별 특징을 추출한다.
사진에는 특정 패턴(특징)이 있고 convolution은 위치별 패턴(특징)을 찾는 연산이다.
CNN을 통과 하면서 더 중요한 패턴(특징)으로 추려나간다.
여러번 conv layer 통과하는 이유는?
5X5를 5X5 conv 1번으로 1X1값을 얻으면 연산 횟수가 25번, 5X5를 3X3 conv 2번해서 1X1로 만들면 연산 횟수가 9+9=18번으로 연산 횟수가 더 적다.
그리고 3X3 conv 2번해서 1X1로 만들면 가운데 부분의 픽셀 값은 가장자리 픽셀 값보다 더 여러 번(2번) 최종 값에 반영된다. 그래서 최종 값이 가운데 부분을 더 크게 반영하는 효과가 있다.
CNN 마지막에 FC layers 통과 하는 것은?
여러 가지 특징과 전체 영역을 종합해서 최종 판단하는 것. 객체는 고양이 같은데 배경이 물이면 수달 일 가능성이 더 크다.
pooling을 너무 많이 하면?
공간 정보를 잃는다. 계속 요약하므로.
CNN을 통과하면 자연스럽게 가운데를 중요하게 보게된다.
Convolution 차원 계산
입력 채널 수 만큼의 필터가 적용되고 각 채널에서 필터 적용해서 나온 feature를 모두 더해서 하나의 feature가 나온다.(통상 입력 채널 수 만큼의 필터가 준비되는 것은 별도 표시 안함. 입력 채널 수와 동일 하므로 표기 안해도 알 수 있기 때문). 여기에 이 conv에서 정의한 채널 수만큼 반복해서 이 feature의 채널 수가 정해진다.
image.png
image.png
패딩과 채널은 별도 언급 안함. 기존 크기 유지하도록 패딩 알아서 적용. 채널은 앞 채널과 동일. 커널 개수에 따라 feature map 채널 수 정해짐.
image.png
1x1 conv, 3 연산 예
image.png
GoogLeNet(inception)
22layers
inception 모듈(100 레이어 이상) 9개
500백만 weights
image.png
inception 모듈 구조(9개 모두 동일 구조)
입력을 나누고, 변형하고, 다시 합치는 전략
다양한 크기(1x1, 3x3, 5x5)의 커널 필터를 사용해서 다양한 특징을 추출하고 이것을 다시 합침
Bottlenet 구조
1x1 Conv를 사용해서 입력 크기는 유지하면서 채널 수를 줄임
아래 그림에서 1x1 conv 사용해서 3채널을 1채널로 줄임. 1x1 conv를 128개 써서 128채널로 변경 했다. 1x1 conv 개수만큼 채널 수를 늘리거나 줄일 수 있다.
image.png
Bottlenet을 쓰면 메모리 사용량 줄어듦
1x1 conv 없는 Inception 구조. 28 x 28 x 672의 메모리 소요됨
image.png
1x1 conv 있는 경우 28 x 28 x 480의 메모리 소요됨.
image.png
Bottlenet을 쓰면 연산량 줄어듦
Conv 연산량 = (k x k) x (m_i x m_i) x (c_(i-1) x c_i)
maxpooling은 연산량이 적어서 보통 연산량 산출에서 제외함
1 x 1 conv 없는 경우 총 854M 연산 소요
image.png
1 x 1 conv 있는 경우 총 358M 연산 소요
image.png
필터의 크기가 달라도 WxH가 동일하게 되도록 stride와 pading을 맞출 수 있다. 이렇게 conv를 여러 번 한 후 채널 방향으로 쌓으면 아래 그림 처럼된다. 이게 inception이다.
image.png
image.png
학습 보조기(auxiliary classifiers)
아래 구조도에서 노란색 배경 부분은 역전파가 잘 안될 때 중간에 값을 넣어주는 경로. 학습 때만 사용. 추론 때는 떼어냄.
image.png
Network in Network
conv에 MLP를 추가해놓은 구조. mlpconv라 부름. 단순 conv에 비해 더 복잡한 처리를 할 수 있다.
아래는 conv와 mlpconv 구조 비교
image.png
전체 네트워크 구조
image.png
Dense Layer(Fully Connected Layer(FC Layer))
클래스 분류 레이어. 보통 2개 사용
image.png
image.png
image.png
image.png
x는 이미지, y는 라벨
image.png
filters는 커널의 개수이다. 입력 채널 수 X 커널 개수 = 출력 채널. 커널 사이즈는 tensorflow/kera에서는 (높이, 가로)로 표시하고, pytorch에서는 (같은 값, 같은 값)으로 설정된다.
image.png
image.png
AlexNet (2012, Krizhevsky et al.)
딥러닝이 본격적으로 컴퓨터 비전에 적용된 대표적인 모델. ILSVRC 2012에서 우승하며 CNN 기반 이미지 인식의 시작을 알림.
Krizhevsky et al. 이 AlexNet으로 ImageNet Large-Scale Visual Recognition Challenge(ILSVRC) 2012에서 우승
AlexNet은 8개의 학습 가능한 계층(5개의 컨볼루션 계층 및 3개의 완전 연결 계층)으로 구성
fully connected layer의 마지막 계층은 N-way(N: 클래스 수) softmax 분류기에 연결
이미지에서 특징을 얻기 위해 네트워크 전체에서 여러 컨볼루션 커널을 사용
정규화, over-fitting 예방을 위해 dropout 사용
빠른 훈련 수렴을 위해 ReLU를 사용(tanh보다 6배 빠름)
tanh() 발음: 탄젠트하이퍼볼릭
image.png
R-CNN (2014, Girshick et al.). 객체인식/two-stage
3. CNN의 발전 및 강화 (2015~2020)
Fast R-CNN (MS, 2015)
Faster R-CNN (중국과기대, 중국 MS, 중국 Facebook, 2016)
FPN (Facebook, Cornell대학교)
R-FCN (MS, 칭화대, 2016)
VGGNet(ICLR 2015, Karen Simonyan, Oxford 대학)
옥스퍼드대학에서 개발. ILSVRC 2014에서 92.7%로 2등(1등: GoogLeNet)
1등과 성능 비슷하면서 구조가 단순해서 많이 활용함.
image.png
AlextNet이 CNN을 소개한 이후 VGGNet은 깊이가 성능을 좌우한다는 것을 보여줌. 이로 인해 GoogLeNet이 22층, ResNet이 152층으로 발전하는 계기가 됨
AlexNet은 초반에는 커널을 크게 하고 갈수록 커널 크기를 줄였다. 이미지의 특징을 점차 추려 나간다는 컨셉이다. VGGNet은 커널이 3x3만 해도 충분하다는 것을 보여줌.
VGGNet은 3X3 conv 2번하면 5x5 1번한 것과 동일하게 입력 이미지의 5X5를 커버하면서 연산량은 더 적다는 것을 밝혀냄.
5X5를 3X3 conv 2번해서 1X1로 만들면 연산 횟수가 9+9=18번, 5X5를 5X5 conv 1번으로 1X1값을 얻으면 연산 횟수가 25번으로 연산 횟수가 더 적다.
여기서 3x3이 2번에 걸쳐서 커버하는 입력의 5x5 영역을 리셉티브 필드라고 함.
단순하고 일관된 구조로 구현이 쉽고, 변형이 용이하여 GoogLeNet보다 많이 사용
VGGNet 영상인식 성능도 높고 transfer learning으로 객체 검출, segmentation에도 높은 성능 보여줌.
CNN 레이어 13개 또는 16개 + fully connected layer 3개 = 16개, 19개로 구성
모든 CNN 계층에 3X3 필터만으로도 넓은 리셉티브 필드를 확보하여 네트워크 계층이 깊어도 연상량과 파라미터 수를 효율적으로 관리할 수 있게 해줌
AlexNet보다 2배 이상 깊은 네트워크 학습에 성공. layer가 깊을 수록 성능 높음을 보였고 여기서 제시된 16층(VGG16), 19층(VGG19)가 널리 활용 됨.
3개의 fully connected layer가 있는 convolution layer 스택을 추가한 후 softmax layer를 추가하여 생성
컨볼루션 레이어의 수는 8에서 19까지 다양할 수 있음.
VGG는 여러 반복으로 훈련. 첫째, 가장 작은 11계층 아키텍처는 무작위 초기화로 학습되며 가중치는 기울기 불안정성을 방지하기 위해 더 큰 네트워크를 학습하는 데 사용됨.
image.png
image.png
GoogLeNet / Inception(2014, CVPR, Google)
ResNet (2015)
YOLOv1 (2016, Redmon et al.)
SqueezeNet(2016)
AlexNet와 성능은 동일, 모델은 1/50 이하, 용량은 0.5MB 이하. 라즈베리파이 같은 저 스펙의 모바일 단말에도 적용 가능.
3x3 필터 대신 1x1 필터 사용
위의 3x3 필터의 채널 수를 줄임
image.png
정보 유지위해 Down-sampling을 늦춤
squeeze 단계: 1x1 필터로 128채널을 16채널로 줄임
expand 단계: 1x1 필터로 64채널, 3x3 필터로 64채널, 총 128채널인 아웃풋 만듦
image.png
image.png
image.png
SSD (UNC Chapel Hill 대학, Zoox(자율주행차), Gogle, 미시간 대, 2016)
Mask R-CNN (Facebook ,2017)
MobileNetV2(CVPR 2018, Google)
모바일, 단말기에서 높은 정확도와 속도 가능
inverted residual 블록, linear bottleneck으로 크기 줄이면서도 정보 손실 최소화
inverted residual
manifold 분포에 그대로 ReLU를 적요하면 음수는 모두 0으로 치환되면서 음수 공간에 펼쳐져 있던 것들이 0으로 쪼그라 들면서 끊어지거나 겹쳐지게 되어 정보 손실이 발생한다.
그래서 manifold를 일단 고차원으로 옮긴 후 거기서 ReLU를 적용하여 정보 손실 없이 단순화 할 수 있다.
다시 차원을 원래 대로 줄일 때 ReLU 없이 1x1 Conv로 차원(채널)을 원래의 저차원으로 줄인다. 이 마지막 차원을 줄이는 부분을 'linear bottleneck'이라고 부른다. ReLU는 non-linear 인데 ReLU가 없다고 linear라고 구분해서 부르는 것임.
EfficientNet (2019, Google)
CNN의 깊이, 너비, 이미지 해상도를 모두를 최적으로 늘린 구조를 AutoML로 찾음(정확도, 계산량 최적화한 구조)
image.png
네트워크를 키우는 방법에는 폭을 넓히거나 깊게 하거나 해상도를 높이거나 복합적으로 하는 방법이 있다.
image.png
복합적으로 사용한 방법이 가장 정보를 잘 뽑아낸다.
image.png
ImageNet에서의 EfficientNet이 유사한 급의 다른 모델 보다 더 성능이 좋고 parameter 크기도 작다.
image.png
주로 쓰는 EfficientNet-B0 구조는 아래와 같다.
image.png
4. 트랜스포머 기반 모델 및 자율 AI (2020~2025)
Vision Transformer (ViT, 2021, Dosovitskiy et al.)
Transformer 구조를 활용한 최초의 이미지 인식 모델.
image.png
ViT는 전체적으로 처리할 수 있어서 객체감지에 효과적.
이미지 분할 -> 토큰+위치 임베딩 -> 클래스 토큰
image.png
CNN 보다 Transfomer가 나은 이유
이미지 전체 적인 정보를 뽑으려면 깊이가 깊어져야 하고 필터크기나 합성곱 영향이 큼
Transfomer는 self-attention으로 전체 문맥/상황을 파악하는데 유리함
대규모 이미지 데이터셋 확보로 Transfomer 활용이 가능해짐(ImageNet-21, JFT-300M 등)
주요 아이디어
이미지 패치 분할
패치 임베딩 + 위치 임베딩
클래스 토큰 사용
Transfomer의 인코더 사용
성능
pre-training(ImageNet-21k, JFT-300M) 후 fine-tuning(ImageNet-1k)하면 성능 우수
CNN 보다 성능 우수
CNN은 멀리 떨어진 영역간의 관계를 반영하기 어려웠는데(매우 깊어 져야 함) Transfomer에서는 self-attention으로 해결
position에 대한 attention을 확인해보니 전에는 객체의 일부분만으로 판단했는데 ViT에서는 객체 전체 영역으로 판단
image.png
단점
대규모 데이터 학습 전용(작은 데이터셋은이터셋은 성능 안 나옴)
비용: 토큰 개수에 대해 O(N^2). 고해상도에서 연산량 너무 커져서 효율 낮음
개발
1. Image Preprocessing and Transform
사전 학습 모델을 정의하고, 데이터 셋에 대해서 데이터 증강과 정규화를 함
image.png
2. 이미지 평가 Metric
인퍼런스 값과 라벨을 같이 받아서 정확도 리턴하는 함수 준비
image.png
ViT Model
모델을 로딩함
image.png
image.png
모델 구조 확인
Embedded Pathces
입력 이미지를 Convolution해서 768 사이즈의 임베딩 만듦
image.png
인코더 블록 : 보통 12개의 블록을 사용
Layer Normalization
Layer를 정규화함: 각 데이터에 대해서 해당 레이어의 출력 값이 일정 범위와 평균 값을 갖도록 레이어의 뉴런을 튜닝함
Multi-Head Self-Attention
여러 개의 attention 헤드로 병렬 처리해서 다양한 관계를 모델링
Residual Connection
Layer Normalization(두 번째)
MLP(Feed-Forward Network)
Residual Connection
Inference
BEiT (BERT Pre-Training of Image, 2021)
ViT에다 BERT의 마스킹 학습 기법을 적용한 이미지 pre-training 모델
BERT 처럼 마스킹 부분을 추론 하도록 학습함
image.png
이미지 분류, 세그멘테이션 성능 우수
DETR (DEtection TRansformer, 2020, Carion et al.)
CNN 없이 Transformer만을 활용한 객체 검출 모델.
ConvNext (2022)
ResNet에 Transformer적용. 분류, 객체 인식, 세그멘테이션에서 우수
AdamW로 학습
Adam은 gradient와 weight decay를 함께 반영함
image.png
AdamW는 gradient와 weight decay를 따로 반영함
gradient로 업데이트 한 뒤 파라미터에 비례해서 가중치를 감소시킴.
학습률과 규제계수를 독립적으로 조정할 수 있어서 일반화 성능 향상에 유리함.
image.png
Segment Anything Model (SAM, 2023, Meta AI)
프롬프트 기반으로 세그먼테이션 하는 모델.
특징 1. 프롬프트 입력으로 세그멘테이션
점, 사각형, 영역, 텍스트 등의 프롬프트를 이미지와 함께 입력 받아서 해당 부분을 세그멘테이션함(zero-shot 세그멘테이션)
image.png
: 원하는 부분 점 찍으면 해당 부분 세그멘테이션 함.
image.png
특징 2. 큰 인코더, 작은 디코더 구조(MAE(Masked Autoencoder)와 유사)
image.png
image.png
특징 3. 큰 학습 DB
image.png
객체 인식
image.png
2-stage 디텍터는 객체 후보 영역(Region Proposal) 뽑은 후 뭔지 판단하고, 1-stage 디텍터는 feature map으로 영역 도출과 분류를 한 번에 함.
2-stage 디텍터는 R-CNN 계열. 성능 좋지만 느림
1-stage 디텍터는 Yolo 계열, SSD 계열. 실시간.
image.png
A. Pioneer Work
딥러닝 이전의 객체 검출기술
1) Viola-Jones
2001년 제안. 얼굴 검출기로 주로 사용. 효율적이고 빨라서 소형 장치에서는 여전히 사용된다.
알고리즘은 4 단계(Haar 기능 선택, 통합 이미지 만들기, Adaboost 교육,캐스케이드 분류)로 구성됩니다.
Haar 기능
인간의 얼굴에 공통적 인 몇 가지 속성 :
눈 부위는 뺨보다 어둡습니다.
콧대 부분은 눈보다 밝습니다.
일치하는 얼굴 특징을 형성하는 속성의 구성 :
위치 및 크기 : 눈, 입, 콧대
값 : 픽셀 강도의 지향 그라디언트
2) HOG Detector
2005년에 HOG(Histogram of Oriented Gradients) feature extractor를 제안
HOG Algorithm은 일반적으로 보행자 검출이나 사람의 형태에 대한 검출 즉, Object Tracking에 많이 사용되는 Feature 중 하나이다. Image의 지역적인 Gradient를 해당 영상의 특징으로 사용하는 방법이다.
image.png
image.png
템플릿 매칭(template matching)의 경우에는 원래 영상의 기하학적 정보를 그대로 유지하며 매칭을 할 수 있지만 대상의 형태나 위치가 조금만 바뀌어도 매칭이 잘 안되는 문제가 있다. 반면에 히스토그램 매칭은 대상의 형태가 변해도 매칭을 할 수 있지만 대상의 기하학적 정보를 잃어버리고 단지 분포(구성비) 정보만을 기억하기 때문에 잘못된 대상과도 매칭이 되는 문제가 있다.
HOG는 템플릿 매칭과 히스토그램 매칭의 중간 단계에 있는 매칭 방법으로, 블록 단위로는 기하학적 정보를 유지하되, 각 블록 내부에서는 히스토그램을 사용함으로써 로컬한 변화에는 어느 정도 강인한 특성을 가지고 있다.
또한 HOG는 edge의 방향정보를 이용하기 때문에 일종의 edge기반 템플릿 매칭 방법으로도 볼 수 있다. Edge는 기본적으로 영상의 밝기 변화, 조명 변화 등에 덜 민감하므로 HOG 또한 유사한 특성을 갖는다고 생각할 수 있다. 또한 HOG는 물체의 실루엣(윤곽선) 정보를 이용하므로 사람, 자동차 등과 같이 내부 패턴이 복잡하지 않으면서도 고유의 독특한 윤곽선 정보를 갖는 물체를 식별하는데 적합한 영상 feature이다.
HOG를 local feature인 SIFT와 비교해 보면 HOG는 일종의 템플릿 매칭이기 때문에 물체가 회전된 경우나 형태변화가 심한 경우에는 검출이 힘들지만 SIFT는 모델의 특징점과 입력 영상의 특징점에 대해 특징점 단위로 매칭이 이루어지기 때문에 물체의 형태변화, 크기변화, 회전 등에 무관하게 매칭이 이루어질 수 있다. 이러한 특성에 비추어 보았을 때, HOG는 물체의 형태변화가 심하지 않고 내부 패턴이 단순하며 물체의 윤곽선으로 물체를 식별할 수 있을 경우에 적합하고 SIFT는 액자 그림과 같이 내부 패턴이 복잡하여 특징점이 풍부한 경우에 적합한 방법이다.
image.png
3) DPM
DPM(Deformable Parts Model)은 2009년 Pascal VOC 챌린지에서 우승. 딥러닝 이전의 가장 우수한 객체 검출기
물체의 개별 "부분"을 감지하고 가능한 조합인지 여부로 검출하여 HOG보다 정확도 높음
예) 인체는 머리, 팔, 다리 및 몸통과 같은 부분의 집합으로 간주. HOG는 인체 전체에 대한 templet을 갖고서 비교를 한다. 사람은 팔 다리가 움직여서 HOG로 검출하기에 어렵고 신체 부분을 따로 HOG를 적용하고 취합하면 보다 유연하게 판단할 수 있다. 각 부분 별로 SVM 감지 모델이 동작하고 감지된 결과 조합에서 있을 수 없는 결과는 제거하여 최종 결과를 도출한다.
영상을 슬라이딩하며 신체 각 구분, 종합 판단을 해야해서 계산량이 많다. 실시간 어렵다.
image.png
B. Two-Stage Detectors
image.png
R-CNN(2014)
첫 번째 Two-Stage 딥러닝 객체 검출기. 혁신적이었지만 너무 느렸다(inference에 47초/장, 작은 DB 학습에 몇 일)
Region Proposal을 활용한 객체 검출 모델.
단점
box 2000개 모두 feature를 뽑느라 너무 오래 걸린다.
CNN, SVM, Bounding box regression을 end-to-end로 학습할 수 없다.
=> 위 단점을 해결한 fast Fast R-CNN이 나온다
동작 순서: selective search로 객체 후보 box를 최대 2000개 추출 -> 각 box를 227X227로 리사이즈(warp)해서 CNN에 넣어서 4096 차원의 feature 추출 -> SVM으로 객체 인식 -> bounding box regression으로 위치 정의
image.png
image.png
Selective search
색상, 질감, 영역 크기 등으로 non-object-based segmentation을 수행. 이 작업으로 많은 small segmented areas를 얻음
-> bottom up 방식으로 small segmented areas들을 합쳐서 더 큰 segmented areas들을 만든다. 이 작업을 반복하여 최종적으로 2000개의 region proposal을 생성
image.png
CNN
AlexNet의 구조를 그대로 사용해서 각 region proposal box(224x224크기로 변환) feature vector를 추출한다.(224x224 -> 4096x1)
SVM
추출된 2000개 feature vector에 대해서 어떤 객체인지 classification한다.
NMS(Non-Maximum Suppression)
SVM으로 나온 score 값으로 박스 개수를 줄임. 동일 물체에 대한 box는 가장 score높은 하나만 남기고 제거함
두 box의 교집합 영역의 비율인 IoU(Intersection over Union)이 0.5 보다 크면 동일한 물체에 대한 box로 판단하고 가장 score 높은 상자만 남기고 나머지 box는 지운다.
image.png
image.png
Bounding box regression
box의 위치를 교정해준다.
중심 좌표(x, y), width, height를 regression을 통해 적절한 값을 뽑는다. 그 차이 값 만큼 box를 이동, 크기 변경 해준다.
image.png
SPP-Net (Spatial Pyramid Pooling-Net )
R-CNN과의 차이
R-CNN은 2000개 bounding box 마다 CNN으로 feature 뽑는데
SPP-Net은 CNN으로 전체 이미지 feature 1개 뽑은 후 2000개 bounding box 마다 영역별로 feature 를 오려간다.
CNN을 2000번에서 1번으로 줄여서 빠르다.
다양한 크기, 다양한 가로세로비의 객체 이미지를 처리하고 속도 개선을 위해 SPP(Spatial Pyramid Pooling) 계층[40]의 사용을 제안
image.png
RCNN에서는 crop, warp(크기 정규화)를 하기 때문에 아래 그림처럼 객체가 잘리거나 가로세로비가 변형된다.
아래 그림 처럼 spatial pyramid polling layer를 추가하여 crop, warp 하지 않게 했다.
image.png
SPP-Net 흐름
Selective Search로 2000개의 region proposal을 생성한다.
-> 입력 이미지를 CNN에 통과 시켜 feature map을 얻음
-> 각 region proposal box로 잘라낸 feature를 SPP layer에 전달
-> SPP layer에서 얻은 고정된 크기 벡터(representation)을 fully connected layer에 전달
->SVM으로 classification
-> NMS(non-maximum suppression)로 box 선별하고 bounding box regression으로 box 위치 조절
RCNN은 2000번 CNN연산 하는데 SPP-Net은 1번만 CNN하니까 시간 단축된다.
image.png
SPP에서 고정 크기의 벡터를 뽑는 방법은 아래와 같다.
256개 feature map에서 객체 후보 영역으로 지목되어서 잘라진 각 feature에 대해서 windows size와 strade를 적절히 설정해서 pooling하여 출력 크기가 1x1, 2x2, 4x4 가 되도록 한다. 이것을 1차원으로 펴고 이어 붙이면 21개의 숫자(21 bin)이 된다(경우에 따라 30bin, 50bin을 사용하기도 한다. 여기서는 그림 데로 21 bin으로). feature map이 256개 이므로 한 region proposal box에 대해서 256X21 차원 벡터가 생성됨. 이것이 fully connected layer에 입력으로 들어감. 이런 식으로 입력 이미지 크기가 달라도 fully connected layer에 들어가는 벡터의 크기는 고정되게 된다.
image.png
image.png
image.png
이 때 1x1, 2x2, 4x4 pooling은 max pooling을 하는데 이것의 의미는 아래 그림과 같다. feature map 한장 한장에는 나름 각 class에 대한 특징위주로 feature 값들이 뽑혀져 있을 텐데 pooling을 통해서 가장 두드러진 class의 특징 값들을 추려내는 것이다.
이렇게 pooling으로 뽑힌 feature vector로 fully connected layer를 통과 시켜서 최종 feature를 뽑고 이것으로 SVM으로 classificaiton을 하는 것이다.
image.png
Fast R-CNN (MS, 2015)
SPPNet과의 차이점
SPPNet은 RoI pooling때 3개 크기(피라미드) feature뽑는데
Fast R-CNN은 7x7 1개만 쓴다
SPPNet은 마지막에 분류로 SVM을 돌리는데
Fast R-CNN은 softmax를 쓴다
그래서 더 빠르다.
R-CNN/SPPNet의 주요 문제 중 하나는 CNN, SVM, Bounding box regression을 각각 학습 시켜야 한다는 것 이었다.
end-to-end training이 가능하고 속도와 정확도 향상 되었다. SPPNet보다 3배 더 빠른 학습 속도, 10배 더 빠른 inference 속도를 보이며 Pascal VOC 2007 데이터 셋을 대상으로 mAP 66%를 기록
2000개의 feature map을 사용하지 않아도 되어서 disk를 사용하지 않아서 속도 더 빨라짐
image.png
수행 과정
1-1. R-CNN에서와 마찬가지로 Selective Search를 통해 RoI를 찾는다.
1-2. 전체 이미지를 CNN에 통과시켜 feature map을 추출한다.
2. Selective Search로 찾았었던 RoI를 feature map크기에 맞춰서 projection시킨다. (여기까지는 SPP-Net과 동일)
3. projection시킨 RoI에 대해 RoI Pooling을 진행하여 고정된 크기의 feature vector를 얻는다. (이 부분이 SPP-Net과 같은 과정인데 SPP-Net은 1x1, 2x2, 4x4으로 pooling, Fast R-CNN은 7x7 한개로 pooling)
4. feature vector는 FC layer를 통과한 뒤, 두 브랜치로 나뉘게 된다.
5-1. 하나는 softmax를 통과하여 RoI에 대해 object classification을 한다. (SVM 대신 softmax로 classificaiton을 한다.)
5-2. bounding box regression을 통해 selective search로 찾은 box의 위치를 조정한다.
image.png
image.png
RoI Pooling
image.png
SPP에서는 RoI Pooling 때 3개 이상의 사이즈로 pooling을 하는데 fast R-CNN에서는 7x7 사이즈 1개 피라미드 만 사용한다. 1개 피라미드 SPP로 고정된 크기의 feature vector를 만든다. 입력 RoI 크기가 다양할 텐데 stride를 적당히 잡고 Max pooling해서 결과는 fixed length feature vector인 7x7을 만든다.
image.png
Classification & Bounding box regression
SVM 대신 softmax를 사용해서 classificaiton함
image.png
Loss function
Classificaiton의 loss와 Bounding box regression의 loss를 더해서 동시에 학습
image.png
단점
이미지 1장당 2.3초로 많아 빨라졌지만 real-time은 아직 아님
2.3초 중 2초가 region proposal에 소요
Faster R-CNN (중국과기대, 중국 MS, 중국 Facebook, 2016)
최초의 실시간 객체 검출기
Fast R-CNN과의 차이점
Fast R-CNN는 bounding box 후보 추출을 CPU로 돌림
Faster R-CNN은 CNN 기반의 Region Proposal Network로 만들어서 GPU로 돌림
이 과정에서 feaure 영역 추출을 3가지 크기, 3가지 가로세로비로 고정해서 효율 올림
GPU라 더 빠름
Fast R-CNN에서 2.3초 중 2초가 region proposal에 소요되어 이것을 deep network를 사용하여 속도를 개선함. 이 부분 외에는 faster R-CNN과 구조 동일함
image.png
image.png
Fast R-CNN에서는 region proposal이 CPU에서 돌기 때문. GPU로 돌리기 위해서 Conv layer로 만든 Region Proposal Network(RPN)으로 RoI를 구한다.
image.png
Anchor Box
Anchor box는 sliding window의 각 위치에서 bounding box의 후보로 사용되는 box다. 기존에 주로 사용되던 image/feature pyramids와 Multiple-scaled sliding window와 다음과 같은 차이가 있다.
image.png
여기서는 동일한 크기의 sliding window를 이동시키며 window의 중심점을 중심으로해서 사전에 정해진 다양한 비율/크기의 anchor box들을 적용하여 feature를 추출한다. 이것은 imag/feature pyramids 처럼 image 크기를 조정할 필요도 없고, multiple-scaled sliding window처럼 filter크기를 변경할 필요도 없어서 계산 효율이 높다.
논문에서는 3가지 크기에 대해서 3가지 가로세로비의 사각형 조합해서 9가지 사각형 모양을 anchor box로 사용한다. 이를 통해서 다양한 크기의 객체를 포착할 수 잇다.
image.png
Region Proposal Network
feature map을 3x3x256 convolution을 통해서 intermediate layer를 만들고 이것을 대상으로 1x1x2(객체/배경 2class)x9(9개 anchor box) 로 classification result(hxwx18)와 bounding box regression result(hxwx36)를 뽑느다. 이것을 원본 feature에 대입하면 object로 classification된 객체를 해당 위치에서 약간 box 보정을 한 box를 그린다.
image.png
검은 Anchor box가 빨간 Prediction box으로 변환되어서 출력됨.
image.png
image.png
image.png
FPN (Facebook, Cornell대학교, 2016)
Faster R-CNN과의 차이
Faster R-CNN은 원본 이미지에서 하나의 featue를 뽑음
FPN은 원본 이미지를 몇 개 크기로 변경후 각 이미지 마다 feature를 뽑음
그래서 객체 판단 품질 개선됨
다양한 크기의 객체를 인식하기 위해 기존에는 속도가 느리고 메모리를 많이 사용했다.
FPN(feature pyramid network)는 컴퓨팅 자원을 적게 쓰면서 다양한 크기의 객체를 인식한다.
FPN 이전에 다양한 크기의 객체를 인식하는 방법
Featurized Image Pyramid
이미지 크기를 바꿔가면서 feature map을 뽑고 각각의 feature map을 사용한다. 느리다.
image.png
Single Feature Map
conv layer가 크기 변화에 강하기 때문에 CNN을 통해 얻은 마지막 feature map 만으로 객체 인식을 한다. 작은 물체에 대한 정보는 사라진다는 단점이 있다. YOLO에서 사용한 방법.
image.png
Pyramidal Feature Hierarchy
Single Feature Map에서 모든 feature map을 활용해서 객체인식을 한다. feature map 마다 독립적으로 동작하기 때문에 다른 feature map에서 정보를 추출한 것이 있어도 활용하지 않는 다는 점이 비효율적이다. SSD에서 사용한 방법.
image.png
FPN
feature를 뽑고 최종 feature map에서부터 객체 검출을 하고 이 feature map과 그 아래의 더 큰 해상도의 feature map에 합친 후 다시 객체 검출을 한다. 이렇게 상위 레이어의 추상화된 정보와 하위 레이어의 작은 물제 정보를 동시에 살려서 검출을 수행한다는 점이 특징이다.
image.png
아래 그림과 같이 상위 레이어의 feature map을 2배 크기로 키워서 크기를 동일하게 맞춘 후 하위 레이어의 feature map과 합친다.
image.png
image.png
bottom-up pathway에서는 특징을 압축해 가는 과정이다. conv1은 크기가 커서 피라미드에 포함시키지 않는다.
image.png
image.png
image.png
FPN 활용: FPN은 semantic information을 잘 뽑는 네트워크를 만드는 것이 목표이다. 그래서 이 네트워크를 Fast R-CNN에 결합해서 사용할 수 있다.
Fast-RCNN에서는 ROI pooling을 이용해서 ROI 영역을 잘라낸다. 잘라낸 roi의 크기를 보고 스케일이 비슷한 feature map의 feature를 잘라서 네트워크로 보낸다.
Fast-RCNN
image.png
Fast-RCNN + FPN
image.png
R-FCN (MS, 칭화대, 2016) (Region-based fully convolutional network)
R-FCN는 이미지 내의 객체의 위치 정보에 기반한 fully convolutional network이다. Faster R-CNN에서 RPN 이후의 단계를 수정해서 속도를 크게 개선했다.
Translation invariance Dilemma (이동에 강함이 딜레마)
classification에서는 이미지 내에서 객체 위치가 바뀌더라도 동일한 객체로 인식하는 것이 중요하다.(Translation invarinace가 중요하다)
detection에서는 동일 객체라도 이미지 내에서 위치가 바뀌면 이를 잘 반영하는 것이 중요하다.(Translation variance가 중요하다)
2 stage detector는 feature extractor와 detector가 있다. feature extractor인 backbone network는 classifier로 pre-trained되어 있다. 그래서 위치 정보가 없어진/줄어든 feature map이 detector에 입력으로 들어간다. detector는 바운딩박스 그려야해서 위치 정보 필요함. 위치정보 없어진 feature map이 입력되어서 detector 학습이 잘 되지 않는다. 이것이 translation invarinace dilemma이다.
Translation invariance Dilemma를 풀기 위해 R-FCN은 RPN을 통해 추출한 RoI끼리 연산을 공유하면서 객체 위치에 대한 정보를 포함한 feature map을 사용한다.
검색하려는 객체의 각 부위를 class로 보고, 아래 그림 예에서는 아기의 신체 부위 별로 9가지의 class로 나누고 각 class의 feature를 뽑도록 convolution layer를 만든다. 이미지가 CNN을 통과 하면 기본 feature map이 나오고 이 feature map이 앞의 convolution layer를 거치면 각 class별(각 신체 부위별) 특징을 나타내는 feature map들이 나온다. 여기에 ROI에서 뽑은 후보 사각형의 영역에서 feature 를 뽑는다. 각 신체 부위별 feature map에서 조각 조각 뽑고 위치에 맞춰서 이어 붙여서 하나의 feature를 완성한다. 이것을 softmax로 해서 총액이 기준값을 넘으면 해당 객체가 맞다고 판단한다. 신체 부위 별 feature map에서 해당 조각이 나왔어야 총점이 높게 나올 것이기 때문.
image.png
image.png
image.png
Mask R-CNN (Facebook ,2017)
COCO 2016 대회에서 1등, 5fps속도
Mask R-CNN의 차이점
detection에다 segmenation까지 해준다.
Faster R-CNN 에다 RoIAlign과 mask branch를 추가하여 픽셀 단위 segmentaion 가능
image.png
Mask R-CNN = Faster R-CNN + mask branch.
mask branch: object의 mask를 예측하는 branch로 small FCN(Fully Convolution Network)
stage 1: RPN(Region Proposal Network)
stage 2: 각 ROI마다 class, box 위치, mask 도출
image.png
Mask branch
아래는 Faster R-CNN 논리적 구조다.
image.png
Mask R-CNN은 분류 brach에 mask branch를 추가
image.png
RoIAlign: feature map에서 RoI에 해당하는 값을 정확히 뽑는 방법
Faster R-CNN에서는 RoI Pooling을 사용하면 입력 이미지 크기 상관 없이 고정된 크기의 feature map을 얻을 수 있다. 하지만 feature와 RoI 간의 약간의 오차가 생긴다. Pooling과 quantization 때문.
아래와 같이 대충은 맞지만 정확하지는 않다.
image.png
Mask R-CNN에서는 RoIAlign으로 픽셀간 보간(interpolation)으로 RoI가 정확히 정렬 되도록 함. 정확도 10~50% 향상.
아래와 같이 보간으로 정확히 뽑겠다는 것
image.png
(1) RoI projection을 통해 얻은 feature map을 quantization 하지 않고 그대로 사용. projection된 feature map을 3X3으로 9분할 함
image.png
(2) 각 cell에서 3x3으로 나누는 경계 모서리에 있는 점 4개를 선택한다.
image.png
(3) 점 4개 각각의 값을 아래와 같이 주변 4개의 feature 값을 이용한 bilinear interpolation으로 도출한다.
image.png
image.png
점 4개중 첫 번째 점의 값을 구함
image.png
같은 방법으로 2~4번째 점의 값도 구함
image.png
image.png
image.png
(4) 모든 Cell에 대해서 (2)~(3)을 반복한다.
(5) 각 Cell의 점 4개 sampling point에 대해서 max pooling을 해서 해당 RoI에 대한 3X3 feature map 을 구한다.
image.png
Loss funciton
L = classification Loss + bounding box loss(Faster R-CNN과 동일) + mask loss(binary cross entropy loss)
image.png
mask branch에서 출력한 Km^2에서 feature map의 각 cell에 sigmoid function을 적용한 후 loss를 구함
backbone network: ResNet과 FPN 을 사용
Training
(1) Image Pre-processing
원본 이미지의 가로, 세로 중 짧은 길이가 적어도 800이되도록, 긴 길이가 1333을 넘지 않도록 가로세로비를 유지하면서 resize한다.
(2) FPN(Feature Pyramid Network) by backbone network
전처리된 이미지를 ResNet-FPN backbone network에 넣어서 Feature Pyramid {P2, P3, P4, P5, P6}을 얻음
image.png
(3) RPN(Region Proposal Network)
(2)에서 얻은 feature pyramid 별로 RPN에 입력해서 ojbectness score와 bbox regressor를 가진 Region proposal을 출력
(4) Select best RoI
(3)에서 얻은 Region proposal 중 최적의 RoI를 선택한다.
1) ojbectness score가 높은 top-k개의 anchor를 선정. k=12000
2) bbox regressor에 따라 anchor box의 크기를 조정
3) 이미지 경계를 벗어나는 anchor box를 제거
4) threshold-0.7로 지정하여 NMS(Non maximum suppression, 동일 객체에 여러 box있을 경우 가장 스코어 높은 1개만 남김) 수행
5) 전체 feature pyramid level(P2, P3, P4, P5, P6) 에 대해 1)~4)를 모두 수행. 그 후 모든 feature pyramid level의 anchor box에 대한 정보를 concatenate함
6) 결합된 모든 anchor box에 대해 objectness score에 top-N개의 anchor box를 선정. N=2000
(5) RoI Align layer로 feature map 도출
(4)에서 얻은 RoI를 feature pyramid(P2, P3, P4, P5, P6)중 어떤 scale의 feature map과 매칭할지를 아래 공식으로 결정.
w, h는 RoI 크기, k는 feature pyramid의 level index
 w, h는 RoI 크기, k는 feature pyramid의 level index
(6) Classification, Bounding box regression(Fast R-CNN과 동일)
(5)에서 얻은 7x7 크기의 feature map을 fc layer를 거쳐 classificatoin branch, bbox regression branch에 전달해서 class score, bbox regressor를 얻음
image.png
(7) Mask segment
(5)에서 얻은 7x7 크기의 feature map을 mask branch로 전달.
mask branch는 3x3 conv - ReLU - deconv(by 2) - 1x1(xK) conv layer로 구성 (K는 class 수). 이를 통해 14x14(xK) 크기의 feature map을 얻음. feature map 중 가장 높은 score의 class에 해당하는 feature map 1개를 선정하여 최종 prediction에 사용. 이 feature map의 각 값을 sigmoid 함수를 적용하여 0~1 사이의 값을 갖도록 조정함
image.png
(8) Post-processing
(7)에서 얻은 1개의 14x14 feature map을 원본 이미지의 mask와 비교하기 위해 rescale함. 그 후 각 픽셀 값이 0.5 이상인 경우 1을 할당. 미만인 경우 0을 할당. mask segment 생성 완료.
Inference
Proposal layer 구간에서 모든 feature pyramid에 걸쳐 상위 1000개의 RoI를 선정. 이 1000개 RoI를 classificaiton branch와 bbox regression branch에 입력하여 나온 결과에 NMS(Non maximum suppression)을 적용하여 상위 100개를 mask branch에 입력.
DetectoRS(Johns Hopkins University, Google, 2020)
COCO test-dev에서 SOTA(54.7% box AP, Instance segmentation: 47.1% mask AP)
FPN을 bottom-up backbone layer에 추가한 Recursive Feature Pyramid를 제안. 다양한 atrous rate로 얻은 feature를 switch function을 통해 모아주는 Switchable Atrous Convolution을 제안.
image.png
Recursive Feature Pyramid
아래 그림에서 (a)는 일반 FPN(Feature Pyramid Network)
아래 그림에서 (a)는 일반 FPN(Feature Pyramid Network)
아래 그림의 (b)는 RFP(Recursive Feature Pyramid)가 포함된 버전.
아래 그림의 (c)는 (b)에서의 recursive연산을 unroll한것. t는 unroll stop. ASPP(Atrous Spatial Pyramid Pooling)을 connecting module R로 사용. 각 feature layer에서 connecting해서 ResNet backbone에 합쳐지는 방법은 아래 그림과 같다.
image.png
ASPP(Atrous Spatial Pyramid Pooling, DeepLab V3)
아래 그림의 (a)처럼 통상의 convolution에서는 깊어질 수록 output feature map 크기가 작아져서 segmentation하기에 부적합해진다.
아래 그림의 (b)처럼 Atrous convolution에서는 output feature map을 크게 유지 할 수 있어서 segmentation에 유리하다.
image.png
Swithable Atrous Convolution
Swithable Atrous Convolution는 2개의 global context modules와 SAC(Switchable Atrous Convolution)으로 구성. SAC를 통해 input이 두 가지의 다른 atrous rates를 바탕으로 연산하여 더욱 정교한 모델을 만든다. Global context는 일종의 SENet으로 global information을 더해주어 정확도를 높여준다.
image.png
image.png
SENet(Squeeze and Excitation Networks, 2017)
SENet은 채널간의 가중치를 Feature map의 각 채널에 곱해서 정확도를 개선. Squeeze(압축) + Excitation(재조정)
image.png
C. Single-Stage Detectors
image.png
image.png
YOLOv1 (University of Washington, Allen Institute for AI, Facebook AI Research, 2016)
YOLO(You Only Look Once: Unified, Real-Time Object Detection, 2016)는 실시간 객체 검출용으로 나왔고 v5까지 나와 있다. (YOLO v1 2016, YOLO v2 2017, YOLO v3 2018). 조셉 레드몬은 2020/02/21에 비전 연구 중단 선언. 군사/개인정보 보호위해.
특징
이미지를 한 번 만 본다
YOLO 직전의 모델인 R-CNN은 이미지 1장에 대해서 수천장으로 쪼개서 수천번 CNN을 돌린다. 하지만 YOLO는 이미지 전체를 한 번 만 본다.
통합된 모델을 사용한다
다른 모델은 다양한 전처리 모델과 CNN을 결합한다. 하지만 YOLO는 하나의 CNN에서 다 처리한다.
실시간 객체 탐지
빠른 객체 탐지인 Fast R-CNN이 0.5fps 인데 YOLO는 45fps이다. 스트리밍 하면서 객체 검출 가능하다.
YOLO v1 (2016)
최초의 실시간 객체 탐지 모델: One-tage(특징 추출, 분류, 바운딩을 한 번에 처리)
방법
입력 이미지를 SxS 격자로 나눈다.
(1) 각 셀마다 Confidence Score와 B개(논문에서는 2개)의 바운딩 박스 좌표를 갖는다.
Confidence score = 객체가 있을 확률 X IoU
IoU = 바운딩 박스들의 전체 영역 대비 교차 영역의 비율. IoU가 높을 수록 제대로 된 박스
image.png
(2) 각 셀마다 클래스 별 score를 구한다
(1) + (2) 해서 클래스와 바운딩박스를 출력함
이 것들을 곱해주면 그리드 별로 객체의 존재 확률, 그 객체의 class를 파악할 수 있다. 이제 NMS를 거치면 적절한 bounding box와 class가 남는다.
image.png
image.png
image.png
image.png
SSD (Single Shot MultiBox Detector, UNC Chapel Hill 대학, Zoox(자율주행차), Gogle, 미시간 대, 2016)
image.png
이전 객체인식기는 윈도우와 객체 크기가 맞지 않아서 원본 이미지의 크기를 작게하는 Image Pyramid로 해결 했음.
img (1).gif
image.png
이것을 SDD에서는 원본 이미지가 아니라 feature map의 크기를 다양하게 해서 해결함. feature map의 크기가 큰 것에서는 작은 객체 인식, 작은 feature map에서는 큰 객체 인식.
image.png
image.png
image.png
Default Box(=Anchor Box)
사전 정의된 6가지 크기의 bounding box 후보 셋트
보다 다양한 객체를 탐지 하기 위해 feature map의 각 cell 마다 38x38, 19x19, 10x10, 5x5, 3x3, 1x1 총 6개 scale의 default box를 생성한다. inference할 때는 4개의 default box를 생성한다.
image.png
그래서 6개 feature layer에 따라 셀 개수 X 6가지 또는 4가지 X 클래스 수 X 좌표 4개(x,y,w,h) 개해서 총 8732개의 bounding box가 나온다.
image.png
bounding box 개수를 줄이기 위해 Fast NMS로 한 객체에 대해 가장 큰 confidence score를 가진 bounding box만 남겨서 객체인식 결과 도출함.
image.png
이전의 SOTA인 YOLO 보다 빠르고 Faster R-CNN보다 정확도 높다.
SSD300의 mAP : 74.3 %, 59 FPS, SSD500 76.9%, 22 FPS
Faster R-CNN mAP : 73.2%, 7 FPS, YOLOv1 mAP : 63.4%, 45 FPS
YOLO v1은 grid cell 별로 2개의 bounding box만을 사용하여 정확도가 떨어진다. SSD(Single Shot MultiBox Detector)는 더 많은 bounding box를 사용하여 정확도를 올렸다.
YOLO v1의 경우 단일 scale의 feature map을 사용하기 때문에 다양한 크기(특히 작은 크기)의 객체를 검출하기 어렵다. SSD는 VGG16을 base network로 사용하고 보조 network(auxiliary network)를 추가한 구조다. 두 network를 연결할 때 fc layer를 conv layer로 대체하면서 detection 속도가 올랐다. Convolutional Network 중간의 conv layer에서 나온 feature map을 포함해서 총 6개의 서로 다른 scale의 feature map을 사용한다. feature map의 각 cell 마다 서로 다른 scale과 가로세로비를 가진 bounding box인 default box를 사용하여 객체 위치를 추정한다.
image.png
YOLOv2 and YOLO9000 (University of Washington , Allen Institute for AI, 2016)
CVPR 컨퍼런스에서 “YOLO9000: Better, Faster, Stronger”라는 이름으로 논문이 발표
YOLO v1은 class 20개 , v2는 9000개로 늘림
Batch Normalization, Direct Location Prediction, Multi-Scale Training을 도입해서 FPS와 mAP 개선. SOTA
image.png
Better
Batch Normalization
기존 모델에서 Dropout layer를 제거하고 Batch Normalization을 추가. 이를 통해 mAP가 2%증가
High Resolution Classifier
YOLO v1에서는 입력 이미지(448x448)와 VGG 모델의 해상도(224x224 크기로 학습)가 맞지 않았음
YOLO v2에서는 큰 이미지에서 학습한 모델로 fine tuning해서 4% mAP 향상.
Convolutional With Anchor Boxes
yolo v1의 마지막 부분에 있던 Fully Connected layer 2개를 없앴다. 그리고 입력 이미지 크기를 448x448에서 416x416으로 축소해서 속도도 빨라지고 grid cell이 홀수가 되어서 grid cell의 가운데 셀이 중앙에 위치해서 이미지 중앙의 객체를 검출하는데 효과적이다.
RetinaNet
EfficientDet
EfficientNet을 백본으로 하는 객체 인식 모델
BiFPN(Weighted Bi-directional Feature Pyramid Network)와 복합 스케일링(Compound Scaling)으로 성능 향상
image.png
BiFPN(Weighted Bi-directional Feature Pyramid Network)
아래 방향으로 융합하는 FPN과 달리 상하 양방향으로 feature 융합을 함.
image.png
image.png
복합 스케일링(Compound Scaling)
EfficientNet 처럼 레이어 가로 세로 스케일링을 다양하게 실험해서 최적 모델 크기를 찾음
image.png
Swin Transformer
ViT의 한계점
ViT는 고정 크기 패치로 나누고 전역 self-attention을 적용함
위치별, 지역별 특징 추출이 안되기 때문에 classification외의 객체 인식이나 세그멘테이션 같은 다른 다운스트림에는 적용 어려움
Swin Transformer에서는 계층적 구조와 Local self-attention을 반영해서 해결함
계층적 구조
FPN처럼 다양한 크기의 패치로 나눠서 임배딩. Stage를 거치면서 패치 합으로 해상도 줄임. CNN 처럼 저수준에서 고수준으로 특징 추출함.
image.png
패치 병합은 겹쳐서 사이즈를 줄임
image.png
Shifted window
윈도우 간의 상호 작용을 유연하게 할 수 있도록 윈도우 그리드의 크기와 위치를 자유롭게 변경할 수 있다.
image.png
그리드 크기 확대 가능. 가운데는 넓게 잡히고 가장자리는 작게 잡힘
image.png
그리드 위치 이동 가능. 넓게 잡히는 영역을 변경할 수 있음.
image.png
전체 구조
4개의 stage 한 다음 Transformer 인코더 블록 2개로 출력.
계층 구조 부분: 파란색 블럭
shift window 부분: 주황색 블
image.png
YOLOv8 (2023)
한 번의 네트워크 실행으로 모든 객체를 탐지
앵커 프리 접근과 CSPNet/FPN+PAN을 결합해서 속도, 정확도 개선
탐지, 분할, 포즈 추정, 트레킹 등 통합 패키지 제공으로 사용 편리
데이터 증강
Mosaic, Mixup 증강
네 개 이상의 이미지를 합쳐서 하나의 이미지로 만듦.
다양한 스케일/위치/공간 구성 학습 가능
앵커 프리 바운딩 박스 예측으로 계산량 줄일
분류용 Focal Loss
분류 어려운 이미지에 가중치 높임
CSP 백본
CSP(Cross Stage Partial) 병목 모듈 사용으로 계산 중복 줄이고 feature 재사용 늘림
FPN(Feature Pyramid Network) 구조로 여러 객체 크기 커버함
객체 인식 전용 모델 segmentation 포함 모델 별도임.
YOLOv11(2025)
포즈인식기 추가됨. 객체 인식, 세그멘테이션, 포즈 인식, 방향 인식, 분류, 트레킹
구조
Backbone
feature 추출 역할. 여러 크기의 feature map 추출함
Neck
feature map을 업샘플링하고 결합하여 다중 스케일 정보를 모아서 헤드로 전달
Head
검출, 분류 결과 도출
image.png
image.png
image.png
image.png
참고
Anchor Free
앵커 기반 객체인식의 문제
사전 정의된 Anchor에 객체가 들어오지 않으면 객체 탐지 안됨.
Anchor를 많으면 연산량 많아서 느려짐
특징
중심점, 모서리를 직접 탐지
앵커가 없어서 속도와 메모리 효율 향상
작은 객체와 밀집된 객체에 유리함
동작 방법
feature map의 각 픽셀이 어떤 객체의 점인지 판단
box 좌표, 클래스 확률 예측
NMS로 최종 박스 결정
객체 트래킹
주요 이슈: 객체를 놓침
KCF (Kernal Correlation Filters)
객체를 검출 한 다음, 조금 더 큰 2개의 버퍼 사각형(파란색, 녹색)을 두어서 객체의 후보 범위를 계속 업데이트해간다.
큰 녹색 사각형안에서 가능성 높은 녹색 사각형 정하고 파란 사각형 안에서 정확한 객체의 빨간 사각형을 도출한다. 이것을 계속 반복한다.
빨리 움직여도 가장 큰 녹색 안에는 있을 거라는 가정.
image.png
CSRT (Channel and Spatial Reliability Tracker)
더 정확하지만 느리다
image.png
얼굴 검출한 다음 HOG 알고리즘으로 해당 부분만의 윤곽 정보를 추출한다.
-> 객체의 중요한 부분에 가중치를 두어서 신뢰도 맵을 만든다.
-> 공간 신뢰도 맵을 기반으로, 객체의 중심 부분에 높은 가중치를 부여하고 배경의 가중치는 낮게 둔다. (공간: 픽셀 위치 관계)
-> 채널별 신뢰도에 따른 가중치 조정한다(채널: 각 색상이 채널. 예) 얼굴 트레킹이면 살색, 털색, 입술 색 등의 신뢰도가 높)
을 도출한다. 그 특징이 있는 후보 위치를 찾고 해당 영역을 표시한다.
DeepSORT
Multi Object Tracker
DeepSORT = SORT + Feature vector = ( YOLO + Kalman filter + Hungrarian Algorithm ) + Feature vector
객체 검출은 YOLO로 함
Kalman Filter
이전 프레임들의 bbox 정보로 현재 프레임의 객체 위치 예측. 측정값으로 상태 업데이트
상태 정보: 중심 좌표, 가로, 세로, 이들 각각의 속도
Hungarian algorithm
이전 프레임의 객체와 현재 프레임에서 Kalman Fiter로 예측한 객체의 IOU 로 동일 객체 여부 판단
image.png
Feature Vector
위 방법만으로는 tracking 중 잠깐 일부라도 가려지면 놓친다.
Feature로도 동일 여부를 확인한다. 그러면 잠깐 놓쳐도 feature로 동일 여부 확인하고 트레킹 이어서한다.
구조
image.png
장점
높은 정확도, 안정적인 트레킹
단점
feature에 배경 정보가 포함되어서(segment아니고 box다 보니) bounding box가 크게 잡히면 feature matching이 잘 안됨
세그멘테이션
SegFormer (2021)
픽셀단위 세그멘테이션 모델
image.png
특징
training/test 이미지 크기 변화에 따른 오류 요인을 제거
Hierarchical Transformer Encdoer: transformer를 활용하면서도 positional encoder는 제거해서 했음. 위치 정보가 없어서 이미지 크기 변화 상관 없음
이미지 크기 변화 시에도 MLP로 안정적 결과 도출
image.png
구조
image.png
계층적 트랜스포머 인코더
Transformer는 입력, 출력의 차원이 같아서 이미지 해상도가 올라갈 수록 전역적으로attention을 구하는 계산량이 기하급수적으로 늘어난다.
segFormer에서는 계층적으로 크기를 줄여가기 때문에 여러 해상도에서 다양한 표현을 학습하고 연산량도 적어서 빠르다.
image.png
가벼운 MLP 디코더
UNet에서 처럼 인코더의 단계 별로 넘겨 받은 특징 맵을 동일한 해상도로 upsampling한다. 이것을 겹친후 MLP로 각 필셀 별 클래스 확률을 출력한다. 이 확률값으로 segmentation 출력한다.
이렇게 단순한 MLP만으로 디코딩 가능한 이유는 트랜스포머가 동일한 깊이의 CNN 인코더에 비해 더 넓은 영역을 반영하고 있기 때문(더 넓은 Receptive Field를 갖고 있음).
아래는CNN 기반인 DeepLabv3+와 SegFormer의 receptive field 표현. SegFormer는 처음부터 전역을 반영
image.png
image.png
Semantic Segmentation (클래스 별 세그먼트)
클래스 별 세그멘테이션. 다른 객체라도 동일 클래스는 동일 세그먼트
image.png
슈퍼픽셀
비슷한 픽셀들을 묶어서 영역을 넓혀감
image.png
FCN (Fully Convolution Network)
CNN으로 세그멘테이션 했음. 초기 모델이라 성능은 낮음
image.png
image.png
FCN + CRF(Conditional Random Field)
FCN 결과에 CRF를 여러 번 적용해서 엣지를 더 정확히 함
image.png
CRF(Conditional Random Field)
세그멘트 별로 세그멘트 확률 값을 얻는다. 각 세그멘트에 대해서 아래를 반복함
색상이 비슷한 픽셀이 가까이 있으면 동일 세그멘트로 통합
색상이 비슷해도 거리가 멀면 다른 세그멘트
세그멘트 별 확률값 이미지
image.png
CRF 반복
image.png
최종 세그멘트
image.png
SegNet
인코더 디코더 구조의 CNN 모델
인코더는 VGG의 13개 레이어 그대로 사용
image.png
U-Net
image.png
Deeplab
Dilated Convolution으로 CNN + CRF
image.png
Dilated Convolution
receptive field를 좀 더 넓게 보기 때문에 큰 객체를 인지하고 넓은 영역의 정보를 종합한다.
image.png
Fully connected CRF로 경계선을 좀 더 정교하게 한다.
CRF는 인접 픽셀만 고려하는 대신 Fully connected CRF는 전체 픽셀을 고려한다.
그래서 더 정교하다.
PSPNet(Pyramid Scene Parsing Network)
feature map을 피라미드 처럼 다양한 크기로 만든다.
작은 크기의 feature map을 원본 feature map 크기로 다시 확대해서 하나로 겹친 후 세그멘트 도출
이렇게 하면 지역 정보와 글로벌 정보를 모두 감안해서 세그멘테이션 함.
image.png
Instance Segmentation (개별 객체 세그먼트)
객체 별 세그멘테이션. 동일 클래스라도 다른 객체는 다른 세그먼트
image.png
Instance sensitive FCN (2016)
기존 FCN은 클래스는 예측하지만 객체를 구분하지는 못함
Instance sensitive FCN은 Instance senstive score map으로 개별 인스턴스에 대해 다른 응답 패턴을 갖도록 학습.
image.png
이 instance sensitive score map과 객체 점수를 겹쳐보면 객체만 남는다. 여기서 instance별로 다르게 세그멘트한다.
image.png
FCIS
2016년 COCO 세그멘트 대회에서 1등. 0.24초/장
마스크 반전을 통해 후보 영역에서 내부/외부 점수 맵을 종합해서 인스턴트 판단. 정확도 향상됨.
image.png
ROI 내부/외부 맵으로 객체 여부 판단
image.png
객체 영역 각각에 대해서 내부/외부 맵으로 세그멘트 영역과 클래스 판단함.
image.png
image.png
Mask R-CNN
Faster R-CNN으로 feature map상에서 객체 영역을 뽑고 여기서 Faster R-CNN의 ROIPool 대신 ROIAlign을 사용하여 인스턴트 세그멘트 도출
image.png
ROIAlign
Faster R-CNN의 ROIPool은 다른 사이즈의 Regin Proposal이 들어와도 max pooling으로 output 사이즈를 동일하게 만듦. 그래서 입출력 간에 픽셀 단위에서는 정렬이 맞지 않음.
image.png
ROIAlign은 feature map에서 근접한 grid point(파란색 화살표 시작점)을 bilinear interpolation 으로 정확한 feature 값을 도출함
image.png
PANet (Path Aggregation Network)
(a) FPN(Feature Pyramid Network) 한 후에 (b)에서 bottom-up으로 저수준(원본크기)의 특징을 고수준에 전달함. 그래서 저 정확한 세그멘트 엣지 도출함.
image.png
YOLACT (You Only Okk At CoefficienTs)
single-stage 구조의 대표적 instance segmentation 모델
프로토타입 마스크 생성하고 인스턴스 별 마스크 계수 예측
image.png
FPN으로 feature map을 구함
image.png
mask 프로토타입을 뽑음
image.png
마스크 프로토타입 별로 클래스에 얼마나 해당하는지를 계수(coefficient)로 산출함. 프로토타입별로 계수를 반영해서 더하면 사람 마스크, 라켓 마스크로 구분이 된다.
image.png
이 마스크를 적용하면 객체 별 세그먼트가 나온다.
image.png
Panoptic Segmentation (개별 객체에 배경도 구분해서 세그먼트)
Panoptic Feature Pyramid Netowrks
FPN에서 나온 FPN으로 인스턴스 세그멘테이션도 하고 시멘틱 세그멘테이션도 진행함.
image.png
인스턴스 세그멘테이션 진행
FPN으로 Mask-RCNN을
image.png
시멘틱 세그멘테이션 진행
FPN의 각 크기별 feature map을 다시 feature map 원본 크기로 확대해서 세그멘트 뽑음
image.png
UPSNet
FPN에서 시멘틱 헤드와 인스턴스 해드를 뽑음.
image.png
인스턴트 헤드로 개별 객체를 뽑고, 시멘틱 헤드에서 객체와 배경 세그먼트를 뽑은 후 모두 합쳐서 최종 세그멘트 출력함
image.png
VPSNet
비디오용 panoptic sementation 모델, 실시간
이전 프레임과 현재 프레임의 픽셀의 대응점을 갖고 있는 motion map을 만든다. 이전 프레임의 feature map의 픽셀 값을 motion vector로 옯겨서 현재 시간의 feature map을 만든다. 그리고 현재 프레임에서도 feature map을 뽑아서 이 두 feature map을 합쳐서 사용한다. 이렇게 해서 현재 프레임에서는 잘 안보이는 부분에 대한 세그먼트 성공률을 올린다.
image.png
이전 프레임의 세그먼트 들이 현재 프레임의 세그먼트에서 트레킹 할 수 있도록 객체 ID로 관리한다.
현재 프레임에서의 세그멘테이션은 UPSNet을 사용함.
image.png
EfficientPS
EfficientNet 백본과 BiFPN으로 정확도화 속도를 잡은 모델
Image panoptic Segmentation vs Video panoptic segmentation
비디오가 세그먼트 색상이 유지되어서 스무스함. 세그먼트 id 트래킹 반영됨.
Panoptic Quality 평가
Segmentation Quality: 예측한 세그멘트가 GT와 잘 매치되는가: TP만 고려함
Recognition Quality: 같은 클래스인 여러 인스턴스를 잘 구분하는지를 Recall, Precition을 반영하여 평가
image.png
image.png
image.png
참고
proposal-free network
이미지 생성
image.png
VAE 류
VAE (2013, Variational Autoencode) - Autoencoder 기반 생성 모델, 확률적 샘플링을 통한 데이터 생성 가능
확률적 생성 모델의 일종. 입력 데이터를 latent space로 인코딩하고 이것을 x와 유사하지만 새로운 데이터를 생성
image.png
image.png
각 feature 는 가우시안 분포로 가정
latent z는 각 feature의 평균과 분산값을 나타냄
VAE vs AE
AE(AutoEncoder)의 목적은 Encoder. 입력 값을 가장 잘 나타내는 임베딩 Z를 만드는 Encoder를 학습. 이를 위해 Decoder를 활용
image.png
VAE의 목적은 Decoder. 입력값과 유사한 값을 잘 생성할 수 있는 Decoder를 학습. 이를 위해 Encoder를 붙인 것.
image.png
latent Vector의 비교
AE는 특정 입력 값에 대해 하나의 z값(임베딩)이 나옴
VAE는 특정 입력 값에 대해 가우시안분포에 기반한 확률 값이 나옴. 그래서 입력 값과 비슷하지만 다른 값이 출력됨.
image.png
VAE 장점
확률 모델 기반의 잠재 공간 학습
명확한 모델 평가 기준
임베딩을 다른 작업에 사용 가능
VAE 단점
낮은 품질: 생성된 결과물이 흐릿하거나 품질이 낮을 수 있음
VAE Latent Space 시각화
학습이 잘 되었는지, 의미 영역의 분포를 확인 가능
학습 잘 되었는지 확인
image.png
오토인코더에 비해 VAE가 더 넓게 원형태로 구역이 잘 나뉘어져 있음. 가우시안 분포
image.png
의미 영역 확인
MNIST 학습의 Latent 분포가 2차원이다. 여기서 지정한 위치의 latent에서 샘플을 얻어서 해당 영역에서 생성하는 숫자 이미지를 볼 수 있다.
h1: X축 가우시안 분포에서 샘플링을 통해 숫자 하나를 얻어냄
h2: Y축 가우시안 분포에서 샘플링을 통해 숫자 하나를 얻어냄
image.png
image.png
고차원일 때 VAE
2차원 MNIST VAE에서 차원만 2차원에서 128차원으로 증가해서 학습, 시각화
차원을 올리면 학습이 더 빨리진행됨
image.png
동일한 차원의 AE 보다 더 원본과 비슷하게 생성됨
image.png
Beta-VAE (2017)
VAE의 loss는 '인코딩 결과인 z와 x간 정보 오차'와 'p(z|x)분포와 p(z)분포간 차이'의 합이다.
'p(z|x)분포와 p(z)분포간 차이에 베타를 추가한 것이 beta-VAE이다.
beta를 1보다 크게 해서 p(z|x)의 분포 오차의 크기를 키운다. 그래서 p(z|x)가 원래 z의 분포인 p(z)의 분포에 더 가까워지게 한다.
학습한 인코더의 p(z|x)가 본래 z의 분포와 비슷할 수록 z가 자연스러운 상태일 가능성이 크다. z가 자연스러워야 디코더로 이미지를 생성했을 때 자연스럽게 잘 나온다. 본래의 z범위(분포)를 벗어나 있는 z는 이미지로 생성했을 때 합리적이지 않거나 흐릿하거나 무의미한 이미지가 나올 가능성이 크다.
image.png
VQ-VAE (Variational Quantized Variational Autoencoder, 2017)
VAE의 인코더와 디코더 사이에 이미지 객체 벡터와 확률 분포기를 집어 넣은 구조다.
이미지는 여러 객체들이 모인 것을 시각적으로 표현한 것인데 객체들 자체는 이산적이다. 예를 들어 개, 고양이는 이산적이다. 개10%+고양이90%인 것은 없다. 그래서 이산적인 객체 이미지의 임베딩 벡터 사전인 코드북을 인코더와 디코더 사이에 두고 이를 통해서 정보를 주고 받도록 한다. 인코더는 이미지가 이 벡터 코드북 사전의 어떤 벡터들로 구성되어 있는지 인덱스 맵에 명시하고, 디코더는 이 인덱스 맵을 참조해서 임베딩 코드북에서 해당 벡터를 가져와서 z를 재구성한 후 이미지를 생성한다.
image.png
벡터 양자화: 코드북 벡터는 인코더의 z와 제일 비슷하게 만드는 임베딩 벡터 e_j의 인덱스 k로 셋팅한다.
image.png
입력 이미지 -> z_p(x) -> k 맵 & 임베딩 코드북 -> z_q(x) -> 생성한 이미지
VQ-VAE2 (2019)
FPN 컨셉을 적용해서 코드북을 2 레벨로 구성함.
큰 크기로 벡터 k 맵을 만드는 bottom level 코드북, 더 작게 추상화 한 크기로 벡터 k 맵 만드는 top level 코드북
image.png
Pixel RNN (2016)
이전 픽셀 값으로 다음 픽셀 값을 예측해서 이미지를 생성하는 모델
픽셀 값을 256개의 이산 확률분포로 보고 RGB 각각 독립 확률 분포로 나타냄
3가지 픽셀 생성 방법을 제시함
image.png
Row LSTM
위의 픽셀들로 아래 픽셀을 예측함. 역삼각형 모양으로 아래 꼭지점 픽셀을 예측.
Diagonal BiLSTM
사각형에서 오른쪽 아래 픽셀을 예측함
image.png
PixelCNN
위의 두 방법 보다 계산량이 적은 CNN기반 방법도 제시
Image Transformer (2018)
Masked Self-attention 모델을 사용
픽셀 값을 이산 값으로 보고 이전의 픽셀 값들로 다음 픽셀 값을 예측함
image.png
image.png
GAN 류
GAN (Generative Adversarial Networks, 2014)
처음에는 판별자를 진짜와 가짜를 잘 구분하게 학습함(a->b). 판별자가 잘 판별하는 상태에서 생성자가 실제와 동일하게 생성을 해서 판별자가 원본/생성 판별 확률을 50%로 만듦
파란 점선: 판별 분포(1은 진짜, 0은 가짜)
녹색 선: 생성 데이터 분포
검은 점선: 원본 데이터 분포
image.png
판별자 D가 분류를 맞게 하면 value function V(D,G) = log1 + log 1 = 0
판별자 D가 진짜, 생성 중 하나라도 못 맞추면 -∞가 됨
image.png
image.png
image.png
image.png
장점
확률 모델 제시 하지 않아도 생성 학습 가능
데이터 레이블 없어도 됨
학습 데이터 증강에 활용 가능
단점
모드 붕괴 현상
판별자를 잘 속이는 생성잘 되는 것만 계속 생성하려는 경향이 생김
ex) minist면 0~9 모두 잘 생성해야 하는데 입력값 상관 없이 품질 좋은 0만 계속 생성 함.
판별자, 생성자의 성능 차이로 한 쪽으로 치우칠 수 있음
평가가 주관적이라 학습 종료 시점 잡기 애매함 -> 추후 inception scroe로 해결
inception score
엔트로피(무질서도) 높을 수록 무질서, 자연적, 낮을 수록 질서, 인공적임
클래스 분류 분포가 명확해서 분류 쉬워서 엔트로피는 낮으면서
전체 클래스에 골고루 잘 생성해서 생성 전체 분포는 평이해서 엔트로피가 높으면
inception score 높음
네트워크게 민감하여 수 많은 실험 필요
이미지가 커질 수록 학습 불안정
안정적 GAN 학습 방법
DCGAN(Deep Convolutional GAN) 사용
안정적 학습위한 표준 GAN 구조임
레이어 깊이, 필터 수
너무 깊으면 느리고 불안정함.
너무 적으면 표현력이 떨어짐
잔차 연결, 셀프 어텐션 활용
학습 안정성, 표현 향상
노이즈 추가
판별자에 가우시안 노이즈 추가해서 과적합 예방
배치 정규화
생성자와 판별자간 사용 위치를 다르게 적용
학습률(learning rate)
생성자, 판별자 학습 속도가 비슷하도록 조정
미니 배치 디스크리미네이션(Mini-batch Discrimination)
모드 붕괴 예방을 위해 판별자가 한 번에 1개 이미지가 아니라 미니 배치 단위로 판별을 함.
골고루 잘 생성해야 진짜라고 판별 하므로 생성자는 전체를 골고루 학습/생성함
스펙트럴 노멀라이제이션(Spectral Normalization)
판별자의 가중치 W에 대해 최대값을 1로 제한하는 정규화
판별자가 너무 강력해지면 학습 기울기가 0으로 수렴 또는 발산해서 생성자 학습이 안됨
학습 안정성 향상
DCGAN (2015)
fully connected layer대신 CNN을 활용하여 더 고해상도 이미지를 안정적으로 생성
Batch Normalization 적용으로 모드 붕괴 예방
CNN으로 작은 이미지도 잘 학습/표현
단순하면서도 성능 잘 나오는 구조
PROGAN (2018, Nvidia)
GAN은 최종 해상도 이미지를 다뤘다. PROGAN에서는 4x4 해상도 모델 학습부터 시작해서 1024 x 1024 해상도 모델로 키워간다.
생성자는 4x4 이미지를 생성하고 판별자는 이 생성이미지와 리얼 이미지로 진짜/가짜 판별을 한다.
생성자도 생성 이미지 해상도를 2배 키우고, 판별자도 판별 해상도를 2배 키운다.
1024 x 1024 해상도를 생성, 판별 할 때 까지 생성자/판별자 모델을 키운다.
image.png
img (1).gif
모델을 키우는 중간 단계(b)에서 기존 모델의 비중(알파)을 조금씩 줄이고 새 모델(2배 해상도 모델)의 비중을 조금씩 늘려간다. 기존 모델의 비중이 0이 되면 기존 모델을 없애고 새 모델만 남긴다. 이렇게 2배 더큰 모델이 완성된다. 이 과정을 반복한다.
image.png
SAGAN (2019, Self-Attention GAN)
GAN의 layer 마다 CNN feature map마다 attention을 반영해서 self-attention feature map을 만든다. 원래 feature map과 self-attention feature map을 합친 후 다음 레이어로 보낸다.
f(x)는 key, g(x)는 query, h(x)는 value에 해당한다.
image.png
임의의 픽셀에 대해서 관련있는 부분에 attention heatmap이 생기는 것을 확인할 수 있다.
image.png
TransGAN (2021)
GAN에서 CNN대신 Transformer 사용.
256 x 256 이미지 생성이 한계. 이 크기에서는 StyleGAN 보다 성능 우수
생성기: 순수 Transformer 블록만 사용
판별기: ViT(Vision Transformer) 구조로 진짜/가짜 분류
image.png
Generative Pretraining from Pixels (2020)
GPT 처럼 다음 픽셀을 생성하기도하고(a), BERT 처럼 비어있는 픽셀을 채우기도함(b)
image.png
성능 평가 방법
학습한 모델 뒤에 분류기를 붙이고 분류 성능으로 모델 학습 수준을 평가함.(학습이 잘 되었다면 feature를 잘 뽑을 테니)
성능이 잘 나오지는 않았음
스타일 반영한 GAN 류
Neural Style Transfer (2016)
Gram Matrix
이미지의 스타일을 추출한 행렬 G.
Gram Matrix는이미지 feature의 단순 내적 행렬임
이 행렬이 이미지 전체적인 공통 정보를 담게 됨. 픽셀이 섞이면서 공간 정보는 없어지기 때문에 객체 정보는 없어짐. 이미지 정보에서 객체 정보가 빠지니까 스타일 정보만 남은 것임.
구체적으로는 H, W, C를 내적해서 CxC인 Gram Matrix가 나옴. H, W인 픽셀의 위치 정보는 섞여서 사라지고 채널 정보만 남음.
image.png
image.png
image.png
Neural Style Transfer
스타일 이미지에서 스타일 feature map을 뽑고, 원본 이미지에서 content feature map을 뽑은 후, 노이즈 이미지의 스타일 feature map, content feature map을 이들과 유사해지도록 노이즈 이미지를 변형함
스타일 input 이미지에서 conv layer마다 feature map으로 Gram matrix를 뽑는다. output 이미지(노이스에서 시작한 이미지)에서도 conv layer마다 feature map으로 Gram matrix를 뽑는다. 이 Gram matrix들 간의 차이가 Stye Loss이다.
원본 input 이미지에서는 conv4의 feature map과 output 이미지의 conv4의 feature map 간의 차이가 Content Loss이다.
Total Loss는 이 Content Loss와 Style Loss를 적당한 가중치로 더한 것이다.
이 Total Loss가 최소가 되는 gradient 방향으로 Output 이미지를 조금 변형한다.
위 과정을 반복하여 output 이미지를 완성한다.
image.png
StyleGAN (2018)
PROGAN 네트워크에 지정된 스타일을 입히는 방법을 제안.
(a) 기존 GAN은 latent z에서 바로 conv로 이미지를 생성한다.
(b) StyelGAN에서는 latent z를 맵핑 네트워크로 처리를 해서 w로 만든다. 매핑 네트워크의 각 레이어는 각각의 스타일을 갖고 있다( 낮은 레이어 스타일: 얼굴 포즈, 배경, 높은 레이어 스타일: 머리카락, 피부결, 색조 등). 이 스타일에 맵핑 처리한 결과인 w를 이미지 합성 네트워크(PROGAN 구조 모델)의 해상도별 생성 레이어에 AdaIN이라는 형태로 입력한다. (합성 네트워크에 최초 입력 값은 고정 상수 값으로 입력한다. Const 4X4X512 부분)
image.png
image.png
이렇게 스타일이 반영된 지정 해상도의 이미지가 생성되면 판별자가 리얼 이미지와 판별을 한다.
image.png
아래와 같이 스타일이 반영된 이미지가 생성된다. 사용자가 스타일을 지정해서 생성할 수는 없지만 스타일을 반영할 수 있다는 자체가 혁신이었다.
image.png
StyleGAN 2 (2020)
StyleGAN을 개선. 주로 StyleGAN 2를 씀.
개선1. StyleGAN에 얼룩을 제거. AdaIN을 개선해서 해결
image.png
개선 2. 머리가 다양한 방향으로 생성되었지만 치아는 정면으로만 생성되는 현상을 해결. PROGAN의 점진적 해상도 키우는 방법 때문임. 다양한 해상도로 생성할 수 있는 3가지 방법을 제안해서 해결함.
image.png
VQ-GAN (2021)
Transformer 기반으로 이미지 생성에서 SOTA 최초 달성, 고해상도 이미지 생성가능해짐.
VQ-VAE에서 임베딩 벡터 코드북과 벡터 인덱스 맵으로 디코더용 z_q를 만드는 대신에
VQ-GAN에서는 임베딩 벡터 코드북과 트랜스포머로 디코더용 z_q를 만든다.
image.png
VQ-VAE에서 인덱스 맵을 만드는 대신에 VQ-GAN에서는 트랜스포머가 바로 Z_q를 만든다.
image.png
Z_q를 만드는 방법은 벡터 인덱스 나열 s의 바로 다음에 올 s_i를 예측하는 것을 윈도우잉으로 반복한다.
image.png
VQ-GAN은 Transformer를 사용하기 때문에 큰 크기의 Z_q도 만들 수 있다. 그래서 다른 GAN에 비해 큰 해상도도 생성할 수 있다.
그리고 Transformer가 Z_q를 만들 때 입력 값에 컨디션도 같이 넣을 수 있어서 요구 스타일 조건도 같이 받을 수 있다. depth map, 세그멘테이션 맵, 키포인트, 이미지 클래스 등을 조건으로 입력할 수 있다.
image.png
컨디션을 주고 고해상도 이미지 생성한 결과
image.png
ViT-VQGAN (2022)
VQ-GAN에 ViT를 적용하고 classification으로 latent z가 정확하게 만들어 졌는지도 검증했음
이미지 입력으로 완전한 이미지 대신 ViT 처럼 조각낸 이미지를 입력해서 Transformer에 입력했다.
그리고 트랜스포머가 만든 Z_q를 입력 feature로 해서 classifiation 성능을 측정했다.
image.png
레이턴트 편집 류
GANspace (2020)
latent space에는 다양한 이미지 요소들이 반영되어 있고 latent z를 latent space에서 변경하면 스타일을 변경할 수 있다는 것을 확인함.
StyleGAN에는 Z latent space와 스타일 반영하는 매핑 네트워크를 통과한 결과 w의 공간인 W space가 있다. Z space에서 n개 데이터를 뽑아서 W space로 보낸다음 PCA한다.
image.png
여기서 주성분을 선택하거나 특정 주성분의 값을 변경하면 아래와 같이 성별, 얼굴 각도, 나이, 머리색을 변경할 수 있다. 위에서부터 행별로, 0번째 주성분을 변경한 결과, 1번째 주성분을 변경한 결과, 2번째 주성분을 변경한 결과, 0~2번째 주성분을 변경한 결과, 7~8번째 주성분을 변경한 결과 이미지이다.
image.png
SeFa (2021)
스타일 변경 요소를 체계화 했음
스타일 변경이라는 것은 latent z를 n 만큼 위치 이동한 것이라고 정의했다. 즉, z 벡터에 n벡터를 더하면 된다. 계산 편의를 위해 W space로 이동(Affine Trasnformation)하면 z는 Az+b 로 표현할 수 있고 n은 aAn으로 표현할 수 있다. 둘을 합하면 이동한, 변환한 w가 된다. 여기서 변화 시키는 부분이 aAn 부분이므로 |aAn|의 값이 가장 커지는 n이 변화를 위한 가장 큰 주성분으로 볼 수 있다. 이것을 기준으로 순차적으로 주성분을 뽑고 각 주성분을 조정하여 스타일 변경을 제어할 수 있다.
image.png
이 방식으로 각 주성분들을 조정해보니 아래 그림과 표 처럼 자세, 성별, 나이, 안경, 미소에 맞추어서 잘 변형되었다. 다른 스타일 항목에의 영향도 적고 변형 품질도 unsupervised임에도 supervised인 InterFaceGAN을 대체할 만큼 잘 나왔다.
teaser.gif
image.png
그리고 StyleGAN의 합성 블록의 conv 레이어 블록의 레벨이 높을 수록 전체적/추상적인 특성이 변경됨을 확인했다. 큰 해상도인 bottom layer 블록에서는 자세, 방향이 변했고, middle layer 블록에서는 눈 크기, 확대, 형태가 변했고, 작은 해상도인 Top layer 블록에서는 페인트 스타일과 전반적인 색상등으로 변경되었다.
image.png
StyleSpace Anaysis (2021)
이전에는 StyleGAN의 W space에서 위치를 변경했다. StyelSpace Anaysis에서는 W space 다음에 S라는 스타일 변경 전용 space를 추가하자는 제안이다.
아래 그림에서 S공간 박스만 없으면 그대로 StyleGAN 구조이다. 저 S 공간을 추가하자는 이야기다.
image.png
이 S space를 분석, 변경하면 아래와 같이 세세한 변경을 할 수 있다. 머리카락, 자동차 그릴, 범퍼, 헤드라이트 등
image.png
image.png
Diffusion 모델 류
image.png
Diffusion Model
원본 이미지에 노이즈를 추가하는 Forwad Diffusion Process, 노이즈에서 복원하는 Backward/Reverse Diffusion Process로 구성
image.png
특정 분포 위치의 이미지도 노이즈를 섞을 수록 정규 분포 위치로 옮겨온다.
image.png
정규 분포 위치의노이즈를 특정 분포 위치의 특정 이미지로 복원/생성한다.
image.png
이전 단계에다 노이즈를 조금씩 더 추가함. q(X_t|X_(t-1))은 X_(t-1)에 노이즈를 추가해서 X_t를 만든다. 노이즈는 베타 만큼의 크기를 갖는 가우시안 노이즈다. 베타는 요즘은 cosine을 쓴다.
image.png
image.png
노이즈 포함한 이전 단계에서 가우시 노이즈를 조금 걷어내는 확률 p를 학습. 여기서도 노이즈는 베타 크기의 가우시안 노이즈이다. 인퍼런스 때는 노이즈 상태인 X_T에서 시작하므로 적용된 노이즈의 분포를 모르므로 평균과 분산을 추정해나간다.
image.png
image.png
노이즈 베타 값을 cosine쓰는 이유는 아래와 같이 linear하게 증가하게 할 때 보다 노이즈가 더 점진적으로 추가 되어 더 안정적이다. linear하게 적용하면 노이즈가 급하게 추가되어서 중간 이후부터는 X_t가 완전 노이즈가 되어버려서 복원하기 힘들게 된다.
image.png
스텝수를 1000번 이상으로 늘릴 수록 품질이 좋다. 그런데 현실적으로 스텝을 1000번이나 하기에는 너무 오래 걸리므로 DDPM(빨간색)을 쓰면 초반부터 적절한 품질을 얻을 수 있다.
image.png
생성 제어
스텝 마다 이미지를 예측해서 그만큼 노이즈를 제거하는 것 보다, 노이즈를 예측해서 해당 노이즈를 제거하는 것이 더 학습 안정성이 높음. 그래서 학습, 제어 모두 노이즈인 엡쉴론을 대상으로 함.
Conditional Training
잘 안씀.
수식에 컨디션 c를 직접 넣음. 불안정함.
image.png
Classifier Guidance
잘 안 씀.
학습된 classifier의 결과로 가이드 함.
noise map에 특정 클래스 객체에 대한 gradient를 추가하는 방식. 특정 클래스(개, 고양이, ..) 객체가 두드러지게 생성
image.png
image.png
Classsifier-Free Guidance(CFG)
가장 많이 쓰임
프롬프트의 강도를 설정
image.png
프롬프트가 이미지 생성의 조건 c이다. 이 조건의 강도를 설정하는 것이 CFG이고 w값이다.
노이즈 생성식은 프롬프트 반영한 노이즈에 프롬프트 반영 안한 노이즈를 뺀 결과 값이다.
image.png
위 식을 다시 정리하면 프롬프트 반영한 노이즈를 기본으로 하고, 여기에다 '프롬프트 반영한 노이즈와 프롬프트 없는 노이즈의 차이'를 w만큼 추가한다. 여기서 w가 CFG값으로 기본적으로 프롬프트를 얼마나 더 강하게 반영할지에 대한 값이다.
image.png
w = 0. 프롬프트 기본 반영해서 그림
w = 2~7 프롬프트 반영 강함(CFG 기본 값: 7~8
w > 10 프롬프트 매우 강하게 반영
image.png
Direct Injection of Condition
잘 안씀.
샘플링 과정(이미지 생성 과정)에서 원하는 이미지 방향으로 계속 이끄는 방식.
노이즈의 영향으로 원하지 않는 방향으로 가기도 함.
스텝 중간에 레퍼런스 이미지의 structure를 직접 추가함.
image.png
image.png
(Multimodal) Prompt Guidance
많이 씀
프롬프트로 임베딩하는 추가 모듈 존재
기존 Denoising 모델(UNet)에 zero convolution, cross-attention, FiLM 등으로 입력
Text Guidance(에디팅 특화)
많이 씀
생성한 이미지를 수정 생성. DDPM 중간으로 다시 보내서 생성.
효율 개선
image.png
DDIM (Denoising Diffusion Implicit Models, 2021)
DDPM(Denoising Diffusion Probabilistic Models)의 역과정은 t, t-1, t-2로 순차적으로 1000 단계를 모두 처리하려다보니 너무 느리다. 순차 처리라 GPU로 병렬 처리도 안됨.
DDIM은 t에서 바로 원하는 t-i로 바로 가기 때문에 시간이 확 줄어든다.
아래 그림에서 DDPM은 왼쪽 처럼 x_2가 x_1을 전제로 한다. DDIM은 오른쪽 처럼 x_2는 x_1뿐만 아니라 x_0도 조건으로 갖고 있다고 전제한다.
image.png
그러면 x_t 에서 x_0을 구한 다음 x_t와 x_0로 x_i를 바로 구할 수 있다.
image.png
x_(t_1), x_0를 조건으로 x_t 를 구하는 아래 식을 전개하면
image.png
아래와 같이 도출할 수 있다. 여기서 시그마가 0이 아니면 DDPM고 0이면 DDIM이 된다.
image.png
그리고 x_0, x_t 모두 가우시안 분포임을 이용하면 x_0의 예상값은 아래와 같이 된다. 그래서 위 식에서 시그마를 0으로 놓고 아래 x_0 예측값을 적용하면
image.png
image.png
임의의 s인 x_s를 아래와 같이 정리할 수 있다.
image.png
이제 x_0 예측값과 현재 값인 x_t 를 알고 있으니 임의의 s에 대한 x_s값을 바로 계산해 낼 수 있다.
이 식을 이용해서 DDPM의 1000개 스텝을 모두 밟지 않고 여러 스텝을 건너 뛰어가면서 x_s값을 구하면 몇 개 스텝만으로 이미지를 생성할 수 있다.
이 때의 품질을 보면(아래 표에서 n이 1이 DDPM, 0이 DDIM이다. 숫자가 작을 수록 우수 품질. DDIM은 50스텝 만에 DDPM 1000스텝을 뛰어 넘었다.
image.png
Progressive distillation (Progressive distillation for fast sampling of diffusion models, 2022)
DDIM을 교사로해서 학생을 학습해서 4 스텝만에 DDIM 100스텝 성능을 초과함
image.png
image.png
DDIM의 한 스텝 식은 아래와 같다.
image.png
교사(DDIM) 2 스텝한 결과를 학생 1스텝의 값이 되도록 하면 아래와 같다.
image.png
이렇게 교사의 스텝을 1/2씩 줄여서 학습하는 것을 반복해서 스텝수를 계속 줄였다.
image.png
학습 절차는 아래와 같다.
image.png
image.png
문제점
증류 학습 특성상 낮은 SNR(Signal to Noise Ratio) 대역을 자주 다루게 됨.
낮은 SNR은 신호 항보다 노이즈 항값이 크기 때문에 x_s 값이 불안정해서 학습이 불안정해진다.
image.png
개선은 했으나 해결은 안됨.
Consistency Model (2023)
1~4 스텝만으로 diffusion 모델 동작 완료
Probability Flow ODE(Ordinary Differential Equation)(확률 흐름 미분방정식)가 주어 졌을 때 모든 샘플(x_t, t)에서 원본(x_0, 0)로 한번에 복원할 수 있는 f()를 학습한다. distillation(증류) 학습 법과 Isolation(독립적) 학습법을 제시했다.
image.png
Consistency distillation
x_t를 이용해서 PF-ODE 경로를 학습하고, 이 경로내의 모든 x_t에 대해 x_0로 바로 가는 consistency function을 학습한다.
image.png
활용 분야
super-resolution
Video generation
image.png
Video Diffusion Models (2022)
3D U-Net으로 16프레임 video 생성
image.png
Imagen Video
텍스트로 비디오 생성. cascade 방식으로 작고 짧은 비디오를 길고 크게 늘림
텍스트 프롬프트로 16 프레임 40X23 해상도, 3 fps 비디오를 생성한 후 단계 마다 시간과 해상도를 늘려서 128 프레임, 1280X768 해상도, 24 fps까지 늘림
image.png
프레임 사이의 시간 종속성을 학습/생성하기 위해 spatial attention, spatial conv 들을 temporal attention, temporal conv layer로 연결한 3D U-Net을 적용했다.
image.png
비디오에서의 해결 과제
시간이 흘러도 ID 유지: 몇 초 지나면 다른 사람으로 바뀜
시간 상 일관성 유지하고 더 긴 비디오 생성 가능해야함. diffusion model은 spatial data에 특화 되어 있음.
Text to Video 한계: 글로 비디오를 다 묘사하기는 어려움
VTO(Virtual Try-on, 사용자가 가상공간에서 상품을 착용해봄)
Diffuse To Choose (DTC, 2024)
사용자 이미지(Source)를 입력 받고 옷 부분을 마스킹해서 삭제한다. 마스킹 한 부분에 상품 크기 조정한 이미지를 덧붙이고 U-Net으로 인코딩한다. 이것을 이미지 생성 U-Net 디코터의 각 레이어에 affine transform해서 넣어주면 상품 이미지를 입은 사용자 이미지가 생성된다.
image.png
여기서 VAE 인코더 사용한 것은 입력 이미지를 레이턴트 스페이스로 변환해서 차원 축소를 한다.
생성 예
image.png
편집 기법 - Paint by Example (2023)
원본 이미지에 마스킹하고 프롬프트와 레퍼런스 이미지를 입력하면 합성 이미지를 생성한다.
image.png
학습 방식
원본 이미지에서 crop한 부분을 마스킹을 한후 diffusion model에 넣는다. 그리고 crop한 이미지는 증강한 다음 CLIP을 통해 클래스 명 임베딩을 뽑는다. 이 클래스명 임베딩을 diffusion model에 프롬프트 C로 추가해서 이미지를 생성한다.
image.png
3D 생성
시멘틱 세그멘테이션
오디오 생성
이미지 편집
의료 영상 생성
IMAGEN (2022)
실사 이미지 생성, 언어 이해도 높은 텍스트 임베딩 생성
T5로 텍스트 임베딩 생성 -> 64 x 64 이미지 생성 -> Super Resolution Diffusion 2개로 1024 x 1024 이미지 생성
image.png
실사 이미지 생성
image.png
DALL-E2보다 언어 이해도 높음
image.png
Stable Diffusion (Latent Diffusion Models, 2021)
특징
latent 공간 상에서 이미지 임베딩을 생성해서 낮은 스펙에서 고해상도 이미지 생성 가능
다양한 입력 조건 설정 가능
무료 공개
Pixel Space
이미지 입력 -> VAE 인코더 -> 이미지 임베딩 z 출력
학습 시: 원본 이미지, 512 x 512
생성 시: 사용 안함.
이미지 임베딩 -> VAE 디코더 -> 생성 이미지, 512 x 512
Latent Space
Diffusion Process
이미지 임베딩 z에 노이즈를 추가해서 z_T를 만듦(Diffusion 프로세스 중 노이즈 추가 과정)
Denoising U-Net
노이즈가 추가된 Z_T에 조건 임베딩 T를 추가해서 노이즈가 제거된 이미지 임베딩 Z_(T-1)을 생성함.
Cross-Attention으로 중간 단계의 이미지 임베딩과 조건 임베딩을 합쳐서 처리함.
학습 때는 Diffusion Process -> Denoising U-Net
생성 때는 노이즈 포함된 Z_T를 입력으로해서 Denoising U-Net에서 시작함
Conditioning
텍스트 프롬프트, 시멘틱 맵, 참조 이미지, 스켈레톤 등을 입력 받아서 조건 임베딩을 만든다
image.png
ControlNet (2023)
image.png
Stable Diffusion에 ControlNet 부분을 붙여서 쓴다.
Stable Diffusion은 원래 U-Net 그대로 쓴다. ControlNet 부분은 Stable Diffusion의 U-Net을 copy해 온거다. ControlNet U-Net 인코딩 부분에서 조건 입력의 임베딩을 뽑는다. 이것을 Stable Diffusion U-Net의 디코딩 블록 마다 추가 입력으로 넣는다. 그러면 Stable Diffusion의 U-Net의 디코딩 부분은 원래 생성 하려던 이미지 임베딩에다가 추가로 받은 조건 임베딩를 합쳐서 둘 다 반영된 이미지를 생성하게 된다.
ControlNet의 U-Net의 인코딩 부분은 Stable Diffusion U-Net의 상태 그대로에서 학습을 시작하고, 디코딩 부분은 Zero Convolution(W를 0으로 셋팅)으로 셋팅한 상태에서 학습을 시작한다. 디코딩 부분은 이코딩한 임베딩을 전달하는 역할을 하는데 ControlNet의 임베딩을 0만큼 반영하는 것에서 부터 시작해서 조금씩 늘려가는 형태로 학습을 하는 가중치 조절하는 통로 역할을 한다.
그리고 ControlNet은 Stable Diffusion U-Net 입력인 가우시안 노이즈 이미지 와 조건 입력의 zero convolution(W를 0으로 셋팅)한 결과의 합을 입력값으로 받는다.
image.png
T2I-Adapter (2023)
ControlNet과 같은 시기에 같은 컨셉과 목적으로 나온 모델
image.png
조건 입력용 인코더(노란색 불)가 조건 임베딩을 만들어서 Stable Diffusion U-Net의 인코딩 블록과 Denoising U-Net의 인코딩 블록에 추가로 넣어서 임베딩을 만들 때 조건을 반영하도록 한다. ControlNet은 디코딩 파트에 넣는데 이건 반대다.
image.png
ControlNet이 모델이 더 커서 생성 품질이 더 좋음. 그래서 ControlNet을 더 많이 씀.
IP-Adapter (2023)
Stable Diffusion의 문제점: 기존의 텍스트 조건을 입력하는 Cross attention을 그대로 사용하고 있기 때문에 이미지 형태의 조건은 완전하게 반영이 안된다.
image.png
그래서 IP-Adapter에서는 기존 텍스트용 Cross-Attention 외에 이미지용 Cross Attention을 추가했다. 아래 붉은 색 부분. U-Net의 각 블록에서는 이미지용 Cross-Attention의 결과와 기존 텍스트용 Cross Attention의 결과를 합쳐서 처리한다.
image.png
그래서 이미지형태의 조건을 더 잘 반영한 생성 이미지를 얻을 수 있다.
image.png
LLAVA-MoLE (Mixture of LoRA Experts, 2024)
하나의 MLLM 모델에 다양한 모달 종류의 데이터로 학습 시키는 것은 데이터간 충돌이나 학습 반영 정도가 달라서 학습 시키기가 어렵다.
LAVA-MoLE의 아이디어는 입력 종류별로 각각의 LoRA를 학습 시키고 입력 데이터 종류에 따라 Router가 해당 LoRA를 선택해서 사용한다는 아이디어다. LoRA가 각 입력 종류 별 Expert이다.
image.png
ControlNet + LoRA
구조는 ControlNet으로 설정하고 스타일은 LoRA로 반영하는 식으로 활용
image.png
ImageBind (2023)
다양한 종류의 데이터를 self-supervised learning으로 하나의 임베딩 공간에 반영했다. 다른 종류라도 관련이 높은 데이터의 임베딩이 가까운 곳에 위치함
image.png
캡션이 있는 이미지로 이미지와 텍스트를 학습. 이미지와 텍스트 간의 관계가 자연스럽게 정렬됨(Naturally Aligned. 아래 그림 실선)
이미지와 뎁스맵의 관계를 학습, 비디오 영상과 소리를 학습, 이미지와 온도이미지를 학습, 비디오와 관성(IMU)를 학습했다.
그랬더니 직접 같이 학습하지 않은 관계(텍스트와 소리, 텍스트와 비디오, ...)에 대해서도 관계성이 정렬되어 있게 되었다(Emergent Alignment. 스스로 생겨난 정렬. 그림의 점선)
image.png
image.png
이 임베딩을 이용하면,
검색: 이미지와 소리로 관련 이미지를 검색
image.png
객체 인식: 아래 그림과 소리로 이미지에서 객체 인식
image.png
멀티 모달 이슈
멀티 모달 데이터 부족
멀티 모달 데이터 정렬과 다양한 제어 기술을 적용하니 복잡해지고 이슈 많아짐. 이를 위한 모델 설계와 학습 알고리즘 연구
모델 편향성: 편향된 이미지 생성
Explainable AI: 설명 안됨
인간의 일반 능력, 창의력 반영 필요
할루시네이션
XAI (Explainable AI)
AI 모델 학습 및 평가 (Learning curve 해석/검증, 평가지표의 설계)
AI모델 튜닝 (HPO(Hyper-Parameter Optimization), Class Imbalanced 해결)
AI 시스템 구축 (설계-배포-모니터링-자동화-최적화) - 3 문항, 12점
AI 시스템(ML Pipeline) 설계 및 배포
AI 시스템 모니터링 및 자동화 (지속운영)
AI 시스템 최적화
AI 트렌드 - 2문항, 8점
주요 AI 기술 트렌드
AI 윤리
기술 용어
AI 데이터 전처리
AI 모델 개발 (설계-평가-튜닝)
AI 시스템 구축 (설계-배포-모니터링-자동화-최적화)
AI 트렌드